2014-02-20  Dean Jackson  <dino@apple.com>

        An unresolved WebGL Context should operate normally until used
        https://bugs.webkit.org/show_bug.cgi?id=129110

        Reviewed by Brent Fulgham.

        Add the ability to create a special instance of WebGLRenderingContext,
        that appears normal but won't actually do anything if asked. This will
        be created in the case of the WebGLLoadPolicy being "pending" and helps
        in the case of pages that feature detect by creating a context and
        immediately deleting it.

        Note that the context doesn't actually try to recover from this state
        yet, although that would be a nice addition. When asked to do something
        it could actually try to create the GraphicsContext3D. However, if it
        fails it would then have to fire a context lost.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Move the load policy code out of getContext.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): Add the ability to create a pending context.
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): New constructor for a pending context.
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext): Only delete if not pending.
        (WebCore::WebGLRenderingContext::destroyGraphicsContext3D): Ditto.
        (WebCore::WebGLRenderingContext::clearIfComposited): Everything below is about checking the
        pending state before doing anything, and triggering a resolution if necessary.
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::checkObjectToBeBound):
        (WebCore::WebGLRenderingContext::blendColor):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::compressedTexImage2D):
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::createBuffer):
        (WebCore::WebGLRenderingContext::createFramebuffer):
        (WebCore::WebGLRenderingContext::createTexture):
        (WebCore::WebGLRenderingContext::createProgram):
        (WebCore::WebGLRenderingContext::createRenderbuffer):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::cullFace):
        (WebCore::WebGLRenderingContext::deleteObject):
        (WebCore::WebGLRenderingContext::depthFunc):
        (WebCore::WebGLRenderingContext::depthMask):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateDrawArrays):
        (WebCore::WebGLRenderingContext::validateDrawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::finish):
        (WebCore::WebGLRenderingContext::flush):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::frontFace):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getContextAttributes):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderPrecisionFormat):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isBuffer):
        (WebCore::WebGLRenderingContext::isContextLostOrPending):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::isFramebuffer):
        (WebCore::WebGLRenderingContext::isProgram):
        (WebCore::WebGLRenderingContext::isRenderbuffer):
        (WebCore::WebGLRenderingContext::isShader):
        (WebCore::WebGLRenderingContext::isTexture):
        (WebCore::WebGLRenderingContext::lineWidth):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::polygonOffset):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::releaseShaderCompiler):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::sampleCoverage):
        (WebCore::WebGLRenderingContext::scissor):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::stencilFunc):
        (WebCore::WebGLRenderingContext::stencilFuncSeparate):
        (WebCore::WebGLRenderingContext::stencilMask):
        (WebCore::WebGLRenderingContext::stencilMaskSeparate):
        (WebCore::WebGLRenderingContext::stencilOp):
        (WebCore::WebGLRenderingContext::stencilOpSeparate):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::viewport):
        (WebCore::WebGLRenderingContext::forceLostContext):
        (WebCore::WebGLRenderingContext::forceRestoreContext):
        (WebCore::WebGLRenderingContext::platformLayer):
        (WebCore::WebGLRenderingContext::removeSharedObject):
        (WebCore::WebGLRenderingContext::addSharedObject):
        (WebCore::WebGLRenderingContext::removeContextObject):
        (WebCore::WebGLRenderingContext::addContextObject):
        (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
        (WebCore::WebGLRenderingContext::stop):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::vertexAttribDivisor):
        * html/canvas/WebGLRenderingContext.h:

2014-02-20  Dean Jackson  <dino@apple.com>

        Add an unresolved WebGLPolicy and an API to resolve it
        https://bugs.webkit.org/show_bug.cgi?id=129109

        Reviewed by Anders Carlsson.

        Add a third WebGLLoadPolicy which is "pending" allowing the page
        to go ahead with creating the WebGLRenderingContext and resolve the policy
        at a later time. Add a new API resolveWebGLLoadPolicy to do the resolution.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): WebGLBlock -> WebGLBlockCreation
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForURL): WebGLAllow -> WebGLAllowCreation.
        (WebCore::FrameLoaderClient::resolveWebGLPolicyForURL): New method.
        * loader/FrameLoaderTypes.h: Add WebGLPendingCreation.

2014-02-20  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Enable compositing RenderLayer painting on device pixel position.
        https://bugs.webkit.org/show_bug.cgi?id=128509

        Reviewed by Simon Fraser.

        GraphicsLayer is now positioned on device pixel boundary. This enables us to put
        compositing layers on a subpixel position and animate them with device pixel
        precision.

        Tests: fast/sub-pixel/compositing-layers-on-subpixel-position.html
               fast/sub-pixel/simple-clipping.html

        * platform/LayoutUnit.h:
        (WebCore::ceilToDevicePixel):
        * platform/graphics/LayoutPoint.h:
        (WebCore::flooredForPainting):
        (WebCore::ceiledForPainting):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::enclosingRectForPainting):
        * platform/graphics/LayoutRect.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        (WebCore::pixelFractionForLayerPainting):
        (WebCore::calculateDevicePixelOffsetFromRenderer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:

2014-02-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        Rename border/padding/margin width/height to horizontal/vertical extent on RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=129043

        Reviewed by David Hyatt.

        Using horizontal extent instead of width and vertical extent instead
        of height makes it more obvious that these are measurements of both
        border/margin/padding sides, not just one.

        As David Hyatt put it: "I dislike using terms like 'width' since it
        could be confused with the actual border-width CSS name, i.e., a
        person new to this code would think the method was returning the pixel
        width of a single border."

        No new tests, no behavior change.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget):
        * inspector/InspectorOverlay.cpp:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::positionForPoint):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::horizontalBorderExtent):
        (WebCore::RenderBoxModelObject::verticalBorderExtent):
        (WebCore::RenderBoxModelObject::verticalBorderAndPaddingExtent):
        (WebCore::RenderBoxModelObject::horizontalBorderAndPaddingExtent):
        (WebCore::RenderBoxModelObject::verticalMarginExtent):
        (WebCore::RenderBoxModelObject::horizontalMarginExtent):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossAxisMarginExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisBorderAndPaddingExtentForChild):
        (WebCore::RenderFlexibleBox::computeNextFlexLine):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::localCaretRect):
        (WebCore::RenderInline::generateCulledLineBoxRects):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        (WebCore::RenderListBox::computeLogicalHeight):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::trackPieceRectWithMargins):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/line/LineLayoutState.h:
        (WebCore::FloatWithRect::FloatWithRect):
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::setReferenceBoxLogicalSize):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::updateCachedBoundaries):

2014-02-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        Rename RenderBlockFlow::clearFloats and RenderBlockFlow::newLine to be more accurate
        https://bugs.webkit.org/show_bug.cgi?id=128991

        Reviewed by David Hyatt.

        Rename clearFloats to rebuildFloatingObjectSetFromIntrudingFloats
        since it does just that.

        Rename newLine to clearFloats because it actually does what the CSS
        spec calls clearing floats. This also matches clearFloatsIfNeeded.

        This also removes a FIXME comment that points to a bug that has
        already been fixed.

        This patch is based on a Blink patch by leviw:
        https://src.chromium.org/viewvc/blink?revision=158598&view=revision

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::clearFloats):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2014-02-19  Pratik Solanki  <psolanki@apple.com>

        ASSERT in FrameLoader::shouldInterruptLoadForXFrameOptions
        https://bugs.webkit.org/show_bug.cgi?id=129081
        <rdar://problem/16026440>

        Reviewed by Alexey Proskuryakov.

        Do not assert if the server sends us a malformed X-Frame-Options header.

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

2014-02-20  Krzysztof Czech  <k.czech@samsung.com>

        AX: Use auto to reduce some code in loops
        https://bugs.webkit.org/show_bug.cgi?id=129087

        Reviewed by Chris Fleizach.

        Use auto where appropriate to reduce some code.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::boundingBoxForQuads):
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetNLinks):

2014-02-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164422.
        http://trac.webkit.org/changeset/164422
        https://bugs.webkit.org/show_bug.cgi?id=129102

        Causes assertions in
        ScriptExecutionContext::canSuspendActiveDOMObjects()
        (Requested by zdobersek on #webkit).

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        (WebCore::ScriptExecutionContext::publicURLManager):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptRunner.h:

2014-02-20  Zan Dobersek  <zdobersek@igalia.com>

        Move to using std::unique_ptr for VisitedLinkState, CheckedRadioButtons
        https://bugs.webkit.org/show_bug.cgi?id=128967

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr and PassOwnPtr in the VisitedLinkState and
        CheckedRadioButtons classes with std::unique_ptr.

        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::RadioButtonGroup):
        (WebCore::RadioButtonGroup::remove):
        (WebCore::CheckedRadioButtons::addButton):
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/CheckedRadioButtons.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * dom/VisitedLinkState.cpp:
        * dom/VisitedLinkState.h:

2014-02-20  Artur Moryc  <a.moryc@samsung.com>

        AX: Children Nodes for Canvas objects are not equal to Render Objects.
        https://bugs.webkit.org/show_bug.cgi?id=123568

        Reviewed by Chris Fleizach.

        There is a difference in children nodes taken into account for RenderObject
        and for NodeObject types. There is a problem with text nodes that are
        focusable for EFL/GTK and therefore are not filtered out in the test like it
        happens for the MAC port. Text nodes are eliminated in the
        AccessibilityRenderObject::computeAccessibilityIsIgnored() method. The same
        approach has been applied to the NodeObject to eliminate text nodes.

        Covered by existing tests.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored):

2014-02-20  Zan Dobersek  <zdobersek@igalia.com>

        Move to using std::unique_ptr for KeyboardEvent, ScriptExecutionContext::PendingException
        https://bugs.webkit.org/show_bug.cgi?id=129061

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr and PassOwnPtr for KeyboardEvent and ScriptExecutionContext::PendingException
        classes with std::unique_ptr. ScriptExecutionContext::Task objects are still handled through OwnPtr,
        but this will be addressed later.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        (WebCore::ScriptExecutionContext::publicURLManager):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptRunner.h: Remove an unnecessary PassOwnPtr header inclusion.

2014-02-20  Zan Dobersek  <zdobersek@igalia.com>

        Move to using std::unique_ptr for EventListenerMap, EventTarget
        https://bugs.webkit.org/show_bug.cgi?id=129062

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr and PassOwnPtr in the EventListenerMap and
        EventTarget classes with std::unique_ptr.

        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::add):
        * dom/EventListenerMap.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/EventTarget.h:

2014-02-20  Zan Dobersek  <zdobersek@igalia.com>

        Move to using std::unique_ptr for Document and related classes
        https://bugs.webkit.org/show_bug.cgi?id=129063

        Reviewed by Anders Carlsson.

        Replace uses of OwnPtr and PassOwnPtr in the Document and related classes with std::unique_ptr.

        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::removedLastRef):
        (WebCore::Document::selectorQueryCache):
        (WebCore::Document::implementation):
        (WebCore::Document::formController):
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::clearStyleResolver):
        (WebCore::Document::clearAXObjectCache):
        (WebCore::Document::axObjectCache):
        (WebCore::Document::setParsing):
        (WebCore::Document::styleResolverChanged):
        (WebCore::Document::setTransformSource):
        (WebCore::Document::accessSVGExtensions):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::didAddTouchEventHandler):
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/DocumentEventQueue.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * dom/DocumentMarkerController.h:
        * dom/DocumentSharedObjectPool.cpp:
        * dom/DocumentSharedObjectPool.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::activeStyleSheetsContains):
        * dom/DocumentStyleSheetCollection.h:
        * dom/DocumentType.h:
        * html/FormController.h:
        * rendering/TextAutosizer.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2014-02-20  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Add helper method for region clipping flow content
        https://bugs.webkit.org/show_bug.cgi?id=129036

        Reviewed by Andrei Bucur.

        Add helper method to test whether a region should clip the flow thread content
        and use it thoughout the code.
        Code refactoring, no functionality change, no new tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::shouldClipFlowThreadContent):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        * rendering/RenderRegion.h:

2014-02-20  Frédéric Wang  <fred.wang@free.fr>

        Implement the MathML Operator Dictionary.
        https://bugs.webkit.org/show_bug.cgi?id=99620

        Reviewed by Chris Fleizach.

        The MathML Operator Dictionary is implemented and the corresponding mo
        attributes are parsed. Currently, only the stretchy property is used for
        the visual rendering and the fence/separators properties are used by the
        accessibility code. Very basic heuristics to determine the form are also
        added.

        Tests: mathml/presentation/mo-form-fallback.html
               mathml/presentation/mo-form-stretchy.html
               mathml/presentation/mo-invalid-attributes.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMathFenceOperator):
        (WebCore::AccessibilityRenderObject::isMathSeparatorOperator):
        * mathml/mathattrs.in:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::MathMLOperatorDictionary::ExtractKey):
        (WebCore::MathMLOperatorDictionary::ExtractChar):
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
        (WebCore::RenderMathMLOperator::SetOperatorProperties):
        (WebCore::RenderMathMLOperator::advanceForCharacter):
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::shouldAllowStretching):
        (WebCore::RenderMathMLOperator::updateStyle):
        * rendering/mathml/RenderMathMLOperator.h:

2014-02-19  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayer's offsetFromRenderer subpixel position based.
        https://bugs.webkit.org/show_bug.cgi?id=128694

        Reviewed by Simon Fraser.

        Changing layers from using integral types to using Float/LayoutUnits so that
        we can position them on subpixels. They are still integral positioned though.

        Covered by existing tests.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setOffsetFromRenderer):
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::offsetFromRenderer): removed incorrect comment.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::computeTransformOrigin):
        (WebCore::RenderLayerBacking::computePerspectiveOrigin):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderRegion.h:

2014-02-19  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayer::paintGraphicsLayerContents()'s cliprect FloatRect based.
        https://bugs.webkit.org/show_bug.cgi?id=128911

        Reviewed by Simon Fraser.

        Switching from IntRect to FloatRect makes device pixel position clipping possible.

        Covered by existing tests.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        (-[WebSimpleLayer drawInContext:]):

2014-02-19  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: (RenderLayer)Pass non-css-pixel-snapped dirty rects to PaintInfo when painting renderer().
        https://bugs.webkit.org/show_bug.cgi?id=128913

        Reviewed by Simon Fraser.

        This is part of the preparation to move RenderLayers to device pixel positioning.
        We might need to device pixelsnapp the dirty rects later, but PaintInfo should be
        able to manage that instead of doing it everywhere in the code.

        Covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):

2014-02-19  Ryosuke Niwa  <rniwa@webkit.org>

        fieldset:disabled fieldset > legend:first-child input should be disabled
        https://bugs.webkit.org/show_bug.cgi?id=129077

        Reviewed by Antti Koivisto.

        Similar to r164403. When a fieldset inside a disabled fieldset, input elements inside
        the inner fieldset's first legend element child should be disabled.

        Test: fast/forms/fieldset/fieldset-disabled-2.html

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::legend): Fixed the bug where it was returning the first
        legend element descendent. It should be the first legend element _child_.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState): Fixed the algorithm
        to look for any ancestor fieldset that has been disabled instead of the first fieldset
        ancestor and checking its disabledness.

2014-02-19  Ryosuke Niwa  <rniwa@webkit.org>

        Debug build fix after r164401. Removed a bogus assertion in comparePositions.
        When either position is anchored at a detached node, they don't have a tree scope in common.

        * editing/htmlediting.cpp:
        (WebCore::comparePositions):

2014-02-19  Ryosuke Niwa  <rniwa@webkit.org>

        fieldset:disabled > legend:first-child legend input should not be disabled
        https://bugs.webkit.org/show_bug.cgi?id=129068

        Reviewed by Andreas Kling.

        An input element inside a disabled fieldset element is ordinarily disabled unless it's inside
        a legend element that is the first of its kind to appear in the fieldset's child node list.

        Prior to this patch, an input element inside such a legend element was erroneously disabled if
        we had another legend element between the two as in <fieldset disabled><legend><legend><input>.

        Fixed the bug by correcting the algorithm in updateAncestorDisabledState.

        Test: fast/forms/fieldset/fieldset-disabled-2.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState):

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        Changing selection shouldn't synchronously update editor UI components
        https://bugs.webkit.org/show_bug.cgi?id=129024

        Reviewed by Brent Fulgham.

        Make updates to spellchecker, alternative text controller (correction pane), and delete button controller
        asynchronous for programmatically triggered selection changes.

        We continue to update their states synchronously immediately after we have applied, unapplied, or reapplied
        editing commands to keep states in spell checker and alternative text controller consistent. We should be
        able to make them asynchronous as well in the future but that should be done in a separate patch.

        * WebCore.exp.in:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToChangedSelection): This function used to enumerate all document
        makers and call respondToMarkerAtEndOfWord on each one of them only to exit early when SetSelectionOptions
        had DictationTriggered. This condition is now checked in Editor::respondToChangedSelection to avoid all the
        unnecessary work and remove the dependency on SetSelectionOptions.
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Ditto.
        * editing/AlternativeTextController.h:

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Calls updateEditorUINowIfScheduled before calling respondToAppliedEditing
        on the alternative text controller.
        (WebCore::Editor::unappliedEditing): Ditto.
        (WebCore::Editor::reappliedEditing): Ditto.
        (WebCore::Editor::Editor): Initializes newly added booleans.
        (WebCore::Editor::respondToChangedSelection): Continue to call respondToChangedSelection (for API consistency)
        and setStartNewKillRingSequence but defer the "editor UI updates" to spellchecker, alternative text controller
        and delete button controller by firing a newly added one shot timer.
        (WebCore::Editor::updateEditorUINowIfScheduled): Synchronously update the pending editor UI updates.
        (WebCore::Editor::editorUIUpdateTimerFired): Extracted from respondToChangedSelection.
        * editing/Editor.h:

        * testing/Internals.cpp:
        (WebCore::Internals::markerCountForNode): Calls updateEditorUINowIfScheduled() to update document markers.
        (WebCore::Internals::markerAt): Ditto.
        (WebCore::Internals::updateEditorUINowIfScheduled): Added.
        (WebCore::Internals::findEditingDeleteButton): Added. Updates delete button controller synchronously.
        (WebCore::Internals::hasSpellingMarker): Calls updateEditorUINowIfScheduled() to update document markers.
        (WebCore::Internals::hasAutocorrectedMarker): Ditto.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-19  Anders Carlsson  <andersca@apple.com>

        Add WTF_MAKE_FAST_ALLOCATED to more classes
        https://bugs.webkit.org/show_bug.cgi?id=129064

        Reviewed by Andreas Kling.

        * dom/EventContext.h:
        * platform/graphics/Region.h:
        * platform/text/BidiResolver.h:
        * rendering/LayoutState.h:

2014-02-19  Ryosuke Niwa  <rniwa@webkit.org>

        isEditablePosition shouldn't trigger synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=129026

        Reviewed by Brent Fulgham.

        Just trigger style recalc instead.

        * editing/htmlediting.cpp:
        (WebCore::isEditablePosition):

2014-02-19  Beth Dakin  <bdakin@apple.com>

        UIProcess needs to know the color of the page's extended background
        https://bugs.webkit.org/show_bug.cgi?id=129004

        Rubber-stamped by Andreas Kling.

        Missed this late-breaking review comment. Fixing now!

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):

2014-02-19  Beth Dakin  <bdakin@apple.com>

        UIProcess needs to know the color of the page's extended background
        https://bugs.webkit.org/show_bug.cgi?id=129004

        Reviewed by Brent Fulgham.

        This patch adds a new ChromeClient function, 
        pageExtendedBackgroundColorDidChange() which will be called whenever the extended 
        background color has changed.

        New function.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::pageExtendedBackgroundColorDidChange):

        Store the extended background color in a member variable so that we can know if it 
        changed even if we do not have an m_layerForOverhangAreas.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor):
        * rendering/RenderLayerCompositor.h:

2014-02-19  Dirk Schulze  <krit@webkit.org>

        Missing box doesn't use border-box as reference box for clip-path
        https://bugs.webkit.org/show_bug.cgi?id=129049

        Reviewed by Simon Fraser.

        If no reference box was specified the default reference box should be
        border-box. Previously to this patch the reference box was the bounding
        client rect. This was not following the specification.
        http://www.w3.org/TR/2014/WD-css-masking-1-20140213/#the-clip-path
        The change affects content using -webkit-clip-path in Safari. Since the
        bounding client box is equalvalent to the border box most of the time
        there shouldn't be to much impact.

        Existing tests cover the issue.

        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):

2014-02-19  James Craig  <jcraig@apple.com>

        Web Inspector: AX: clarify reason for ignored state where possible (hidden, default for tag, etc)
        https://bugs.webkit.org/show_bug.cgi?id=129037

        Reviewed by Timothy Hatcher.

        Passing back hidden and ignoredByDefault attrs to clarify some reasons for "ignored" status.

        Test Updated: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/protocol/DOM.json:

2014-02-19  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WebRTC] Updating RTCConfiguration to match WebRTC editor's draft of 01/27/2014
        https://bugs.webkit.org/show_bug.cgi?id=129000

        Reviewed by Eric Carlson.

        Adding RTCIceTransports and RTCIdentityOption to RTCConfiguration object.

        Existing test was updated.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::parseConfiguration): Taking into account iceTransports and requestIdentity
        parameters.
        * platform/mediastream/RTCConfiguration.h:
        (WebCore::RTCConfiguration::iceTransports): Added.
        (WebCore::RTCConfiguration::setIceTransports): Added.
        (WebCore::RTCConfiguration::requestIdentity): Added.
        (WebCore::RTCConfiguration::setRequestIdentity): Added.
        (WebCore::RTCConfiguration::RTCConfiguration): Initialize iceTransports and requestIdentity with the default
        values.

2014-02-19  Antti Koivisto  <antti@apple.com>

        Don't call to willBeDeletedFrom(Document&) when destructing document
        https://bugs.webkit.org/show_bug.cgi?id=129013

        Reviewed by Andreas Kling.
        
        The document is half dead at this point.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode):

2014-02-19  Daniel Bates  <dabates@apple.com>

        REGRESSION (r163560): Always treat SVG <tspan> and <textPath> as display inline
        https://bugs.webkit.org/show_bug.cgi?id=128552
        <rdar://problem/16029658>

        Reviewed by Andreas Kling.

        Following <http://trac.webkit.org/changeset/163560>, SVG <tspan> and <textPath> may be treated as block-
        level elements depending on their CSS styles (e.g. display: block). But such elements should always be
        treated as inline-level elements.

        Tests: svg/text/textpath-display-block.html
               svg/text/textpath-display-none.html
               svg/text/tspan-display-block.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):

2014-02-19  Daniel Bates  <dabates@apple.com>

        Do not dispatch change event twice in single step action
        https://bugs.webkit.org/show_bug.cgi?id=116936
        <rdar://problem/16086828>

        Reviewed by Ryosuke Niwa.

        Merged from Blink (patch by Kent Tamura):
        https://src.chromium.org/viewvc/blink?view=rev&revision=151175

        Test: fast/forms/number/number-type-update-by-change-event.html

        * html/InputType.cpp:
        (WebCore::InputType::stepUpFromRenderer):

2014-02-19  Brady Eidson  <beidson@apple.com>

        Add FeatureDefines for image controls
        https://bugs.webkit.org/show_bug.cgi?id=129022

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:

2014-02-19  Piotr Grad  <p.grad@samsung.com>

        Setting playback rate on Media Controller modifies current time.
        https://bugs.webkit.org/show_bug.cgi?id=129042

        Reviewed by Jer Noble.

        In ClockGeneric: when setting playback rate or stoping timer,clock was restarted using current real time
        instead of provided time by setCurrentTime.
        Changed impl. so that m_offset is updated when clock stops to remember last clock position.
        When playbackRate is changed m_offset is updated in order to not use old time interval for new playback rate.

        Test: media/video-controller-currentTime-rate.html

        * html/MediaController.cpp:
        (MediaController::updatePlaybackState):
        * platform/ClockGeneric.cpp:
        (ClockGeneric::setPlayRate):
        (ClockGeneric::start):
        (ClockGeneric::stop):

2014-02-19  Brady Eidson  <beidson@apple.com>

        Add settings/preferences for enabling image controls
        https://bugs.webkit.org/show_bug.cgi?id=129027

        Reviewed by Jer Noble.

        * WebCore.exp.in:

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setImageControlsEnabled):
        * page/Settings.h:
        (WebCore::Settings::imageControlsEnabled):

2014-02-19  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] shape-outside does not properly handle different writing modes
        https://bugs.webkit.org/show_bug.cgi?id=128631

        Reviewed by David Hyatt.

        Fix ShapeOutsideInfo to properly convert the line coordinates and
        shape coordinates with respect to the writing mode and writing
        direction for the lines that are affected by the shape. This is
        notably different from shape inside in that shape outside needs to use
        the writing mode of the container, not of the element that the shape
        is applied to.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-direction-border-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-direction-content-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-direction-margin-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-direction-padding-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-modes-border-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-modes-content-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-modes-margin-box.html
               fast/shapes/shape-outside-floats/shape-outside-floats-different-writing-modes-padding-box.html

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderWidth): Used by
            ShapeInfo::setReferenceBoxLogicalSize.
        (WebCore::RenderBoxModelObject::borderHeight): Ditto.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::setReferenceBoxLogicalSize): Use the
            container's writing mode to determine the logical dimensions in
            the case of shape outside.
        (WebCore::ShapeInfo<RenderType>::computedShape): Use the new
            ShapeInfo::styleForWritingMode method.
        (WebCore::borderBeforeInWritingMode): Determines the borderBefore for
            the passed in renderer using the writing mode passed in. The
            borderBefore method on the renderer is implemented in RenderStyle,
            unlike with the margin methods, so this was chosen instead of
            attempting to move the border method implementation into a place
            where it could take the writing mode as an argument.
        (WebCore::borderAndPaddingBeforeInWritingMode): Determines the
            borderAndPaddingBefore for the passed in renderer using the
            given writihg mode. See above for why this method instead of doing
            it like margins.
        (WebCore::borderStartWithStyleForWritingMode): Determines the
            borderStart for the passed in renderer using the writing mode and
            direction from the style passed in. See above for why this method
            instead of doing it like margins.
        (WebCore::borderAndPaddingStartWithStyleForWritingMode): Determines
            the borderAndPaddingStart for the passed in renderer using the
            writing mode and direction from the style passed in. See above for
            why this method instead of doing it like margins.
        (WebCore::ShapeInfo<RenderType>::logicalTopOffset): Use the
            container's writing mode to determine the logicalTopOffset in the
            case of shape outside.
        (WebCore::ShapeInfo<RenderType>::logicalLeftOffset): Use the
            container's writing mode to determine the logicalTopOffset in the
            case of shape outside.
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::styleForWritingMode): Return the entire
            style because to determine start/end the writing direction is
            needed in addtion to the writing mode.
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
            Properly convert the containing block line into the reference box
            coordinates of the shape.
        (WebCore::ShapeOutsideInfo::styleForWritingMode): Return the entire
            style because to determine start/end the writing direction is
            needed in addtion to the writing mode.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-02-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] the GstPlayFlags enum diverged from upstream
        https://bugs.webkit.org/show_bug.cgi?id=128957

        Reviewed by Philippe Normand.

        Removed the GstPlayFlags from the GStreamer implementation and
        replaced by the use of the GFlags.

        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::getGstPlaysFlag): Created to get the flags by using the
        GFlags infrastructure.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering):
        Replaced GST_PLAY_FLAG_DOWNLOAD with getGstPlaysFlag.

2014-02-19  Zan Dobersek  <zdobersek@igalia.com>

        Replace WTF::bind() uses in RTCPeerConnection with C++11 lambdas
        https://bugs.webkit.org/show_bug.cgi?id=129001

        Reviewed by Eric Carlson.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::setLocalDescription): Pass a lambda function to
        callOnMainThread() instead of using WTF::bind().
        (WebCore::RTCPeerConnection::setRemoteDescription): Ditto.

2014-02-19  Dan Bernstein  <mitz@apple.com>

        Simplify PLATFORM(MAC) && !PLATFORM(IOS) and similar expressions
        https://bugs.webkit.org/show_bug.cgi?id=129029

        Reviewed by Mark Rowe.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * config.h:
        * editing/Editor.cpp:
        (WebCore::Editor::copyURL):
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadArchive):
        * page/AlternativeTextClient.h:
        * page/EventHandler.cpp:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        * page/scrolling/ThreadedScrollingTree.h:
        * platform/DragData.h:
        * platform/FileSystem.cpp:
        * platform/MemoryPressureHandler.cpp:
        * platform/Pasteboard.h:
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformPasteboard.h:
        * platform/PlatformScreen.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/SuddenTermination.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/AudioFileReaderMac.cpp:
        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/mac/KeyEventMac.mm:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

2014-02-18  Dan Bernstein  <mitz@apple.com>

        PLATFORM(MAC) is true when building for iOS
        https://bugs.webkit.org/show_bug.cgi?id=129025

        Reviewed by Mark Rowe.

        * editing/Editor.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA) now that the former does not
        include iOS.

2014-02-17  Gavin Barraclough  <barraclough@apple.com>

        Add fast mapping from StringImpl to JSString
        https://bugs.webkit.org/show_bug.cgi?id=128625

        Reviewed by Geoff Garen & Andreas Kling.

        Removed JSStringCache from WebCore; call JSC::jsStringWithWeakOwner instead.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::clearWrappers):
            - removed JSStringCache.
        * bindings/js/DOMWrapperWorld.h:
            - removed JSStringCache.
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsStringWithCache):
            - call jsStringWithWeakOwner insead of using JSStringCache.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
            - renamed createLeaked -> createLeakedForMainThread.
        * bindings/scripts/StaticString.pm:
        (GenerateStrings):
            - StringImpl has an additional field.

2014-02-18  Simon Fraser  <simon.fraser@apple.com>

        Remove UIWKRemoteView
        https://bugs.webkit.org/show_bug.cgi?id=129015

        Reviewed by Dan Bernstein.

        The project referenced a maketokenizer script that disappeared
        long ago.

        * WebCore.xcodeproj/project.pbxproj:

2014-02-18  Simon Fraser  <simon.fraser@apple.com>

        border-box clip-paths jump around when outline changes
        https://bugs.webkit.org/show_bug.cgi?id=128929

        Reviewed by Dirk Schulze.
        
        computeReferenceBox() for clip paths was using "rootRelativeBounds"
        to position the border-box. This bounds is an enclosing bounds for
        the layer and its descendants, including outlines and absolute descendants,
        so it is not the correct box to use to offset the border-box.
        
        The caller has offsetFromRoot(), which is the correct thing to use,
        so use it.

        Test: css3/masking/clip-path-root-relative-bounds.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::setupClipPath):

2014-02-18  James Craig  <jcraig@apple.com>

        Web Inspector: AX: more properties: exists, required, and invalid (exists was previously combined with ignored)
        https://bugs.webkit.org/show_bug.cgi?id=128504

        Reviewed by Timothy Hatcher.

        Additions to the accessibility node inspector: exists, required, invalid.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/protocol/DOM.json:

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        Commit the code change supposed to happen in r164320.

        * editing/Editor.cpp:
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        TextFieldInputType::handleBeforeTextInsertedEvent shouldn't use plainText
        https://bugs.webkit.org/show_bug.cgi?id=128953

        Reviewed by Alexey Proskuryakov.

        Don't use FrameSelection's toNormalizedRange and plainText. Instead, use the cached selection start and selection
        end to extract the selected text. The caches are updated inside FrameSelection::setSelection whenever selection
        is inside a text form control via HTMLTextFormControlElement::selectionChanged.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):

2014-02-18  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        Bottom/right sticky positioning don't correctly handle scroll containers with padding
        https://bugs.webkit.org/show_bug.cgi?id=119280

        Reviewed by Simon Fraser.

        Take padding into account during calculation of overflow constraining rect for sticky
        positioning.

        Test: fast/css/sticky/sticky-bottom-overflow-padding.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset):

2014-02-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash when merging ruby bases that contain floats

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

        This crash occurs when we remove a ruby text object and decide to merge
        two adjacent ruby base objects. The right ruby base's children were
        being merged into the left ruby base, but the right ruby base's floats
        were not being moved to the left base. This could cause us not to
        descend into all nodes containing a FloatingObject in
        RenderBlockFlow::markAllDescendantsWithFloatsForLayout(), because we
        assume that if a block does not have a particular float in its float
        list, none of its descendants will, either.

        Reviewed by David Hyatt.

        Test: fast/ruby/ruby-base-merge-block-children-crash-2.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::moveFloatsTo):
        Code split out of moveAllChildrenIncludingFloatsTo().
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo):
        Call moveFloatsTo().

        * rendering/RenderBlockFlow.h:
        Add declaration of moveFloatsTo().

        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::mergeChildrenWithBase):
        Move children and floats to the new base.

        * rendering/RenderRubyBase.h:
        Declare mergeChildrenWithBase().

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):
        Call mergeChildrenWithBase().

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        iOS build fix after r164319.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectedRange):

2014-02-18  Samuel White  <samuel_white@apple.com>

        AX: Searching for "immediate descendants only" can return unexpected results.
        https://bugs.webkit.org/show_bug.cgi?id=128986

        Reviewed by Chris Fleizach.

        Missed an application of the immediateDescendantsOnly flag during the initial implementation. We
        need to make sure we don't decend into the startObject first if it is provided. This fix causes
        the outer loop to 'skip' the first iteration so only siblings of the startObject are considered.

        No new tests, updated existing search-predicate-immediate-descendants-only.html test to cover this case.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::findMatchingObjects):

2014-02-18 Ryosuke Niwa <rniwa@webkit.org>

        Merge notifyComponentsOnChangedSelection into respondToSelectionChange
        https://bugs.webkit.org/show_bug.cgi?id=128993

        Reviewed by Andreas Kling.

        Merged notifyComponentsOnChangedSelection into respondToSelectionChange since notifyComponentsOnChangedSelection
        was only added in iOS codebase in response to the code added for continuous spellchecking and alternative text controller
        in respondToChangedSelection but they should have been called inside setIgnoreCompositionSelectionChange.

        So merge these two functions and make respondToChangedSelection behave like setIgnoreCompositionSelectionChange.

        * editing/Editor.cpp:
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        FrameSelection::textWasReplaced and setSelectedRange shouldn't trigger synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=128951

        Reviewed by Antti Koivisto.

        Cleanup.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced): Don't call updateLayout. It's totally unnecessarily.
        (WebCore::FrameSelection::setSelectedRange): Ditto. Also removed the code to set affinity only when
        range is collapsed since VisibleSelection::validate already does this.

2014-02-18  Eric Carlson  <eric.carlson@apple.com>

        Do not cache media time until media engine returns a non-zero value
        https://bugs.webkit.org/show_bug.cgi?id=128976

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::refreshCachedTime): Don't mark the cached time as valid
            until it is non-zero.
        (WebCore::HTMLMediaElement::currentTime): Return 0 if m_cachedTime is invalid.

2014-02-17  Alexey Proskuryakov  <ap@apple.com>

        [iOS] All WebKit clients should encrypt WebCrypto keys automatically
        https://bugs.webkit.org/show_bug.cgi?id=128938

        Reviewed by Dan Bernstein.

        Don't pass ACLs on iOS. Key will be added to app's default Keychain access group.

        Also, don't pass kSecAttrIsPermanent, which is irrelevant for password items, and
        caused error -50 in DumpRenderTree for me when passed.

        Added fallback to _NSGetProgname for account name, to account for tools such as
        Mac DumpRenderTree that don't have bundle identifiers.

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::masterKeyAccountNameForCurrentApplication):
        (WebCore::createAndStoreMasterKey):

2014-02-18  Ryosuke Niwa  <rniwa@webkit.org>

        setSelectionRange should set selection without validation
        https://bugs.webkit.org/show_bug.cgi?id=128949

        Reviewed by Enrica Casucci.

        Since positionForIndex in HTMLTextFormControlElement always returns a candidate Position, we don't have to
        validate selection in setSelectionRange.

        Also fixed various bugs uncovered by this change.

        This patch also fixes fast/forms/input-select-webkit-user-select-none.html, which used to assert wrong outcome
        so that WebKit's behavior matches that of Chrome and Firefox.

        Test: fast/forms/input-select-webkit-user-select-none.html

        * dom/Position.h:
        (WebCore::positionInParentBeforeNode): This function had a bug that when node is a child of the shadow root
        it would return a null Position. Allow a position anchored inside a shadow root.
        (WebCore::positionInParentAfterNode): Ditto.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveWithoutValidationTo): Renamed from moveTo and avoided selection validation.
        * editing/FrameSelection.h:

        * editing/htmlediting.cpp:
        (WebCore::updatePositionForNodeRemoval): Fixed the bug that this function doesn't update positions before
        or after children even if the shadow host of the anchor node is getting removed. Move the position before
        the shadow host to be removed in both situations.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): moveTo is renamed to moveWithoutValidationTo.
        (WebCore::HTMLTextFormControlElement::selectionChanged): Check if the cached selection offsets are different
        in lieu of FrameSelection::isRange() since they're equivalent here.
        (WebCore::positionForIndex): Return the position inside or after the last br when there is one to match
        the canonicalization algorithm we have. It's probably harmless to return the last position in the inner text
        element anyways since most of our codebase supports that but this would avoid having to rebaseline dozens
        of tests and reduces the risk of this patch.

2014-02-18  Zan Dobersek  <zdobersek@igalia.com>

        Move IndexedDB module, LevelDB code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128964

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr and PassOwnPtr in the IndexedDB module and LevelDB platform code with std::unique_ptr.

        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackend::processPendingCalls):
        (WebCore::IDBDatabaseBackend::processPendingOpenCalls):
        (WebCore::IDBDatabaseBackend::openConnection):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        (WebCore::IDBDatabaseBackend::close):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        (WebCore::IDBDatabaseBackend::hasPendingSecondHalfOpen):
        (WebCore::IDBDatabaseBackend::setPendingSecondHalfOpen):
        * Modules/indexeddb/IDBPendingDeleteCall.h:
        (WebCore::IDBPendingDeleteCall::IDBPendingDeleteCall):
        * Modules/indexeddb/IDBPendingOpenCall.h:
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::setUpMetadata):
        (WebCore::DefaultLevelDBFactory::openLevelDB):
        (WebCore::IDBBackingStoreLevelDB::IDBBackingStoreLevelDB):
        (WebCore::IDBBackingStoreLevelDB::~IDBBackingStoreLevelDB):
        (WebCore::IDBBackingStoreLevelDB::open):
        (WebCore::IDBBackingStoreLevelDB::openInMemory):
        (WebCore::IDBBackingStoreLevelDB::create):
        (WebCore::IDBBackingStoreLevelDB::getDatabaseNames):
        (WebCore::deleteRange):
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        (WebCore::IDBBackingStoreLevelDB::getObjectStores):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::getIndexes):
        (WebCore::findGreatestKeyLessThanOrEqual):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::~LevelDBDatabase):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::openInMemory):
        (WebCore::IteratorImpl::IteratorImpl):
        (WebCore::LevelDBDatabase::createIterator):
        * platform/leveldb/LevelDBDatabase.h:
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::commit):
        (WebCore::LevelDBTransaction::createIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::TransactionIterator):
        (WebCore::LevelDBTransaction::TransactionIterator::refreshTreeIterator):
        (WebCore::LevelDBWriteOnlyTransaction::LevelDBWriteOnlyTransaction):
        * platform/leveldb/LevelDBTransaction.h:
        * platform/leveldb/LevelDBWriteBatch.cpp:
        (WebCore::LevelDBWriteBatch::LevelDBWriteBatch):
        * platform/leveldb/LevelDBWriteBatch.h:

2014-02-18  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Add type-checked casts for StyleImage and subclasses
        <http://webkit.org/b/128915>

        Address some style issues based on feedback from Andreas Kling.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImageURL):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::~CSSImageSetValue):
        (WebCore::CSSImageSetValue::hasFailedOrCanceledSubresources):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::hasFailedOrCanceledSubresources):
        - Use the reference version of the type-checked casts since we
          know the pointers are not NULL.

        * rendering/style/StyleImage.h:
        - Use 'styleImage' instead of 'resource' in
          STYLE_IMAGE_TYPE_CASTS.

2014-02-18  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary UserActionElementSet constructor, destructor
        https://bugs.webkit.org/show_bug.cgi?id=128962

        Reviewed by Andreas Kling.

        UserActionElementSet constructor and destructor are not necessary, as is not the
        static create() function that returns PassOwnPtr<UserActionElementSet>. The implicit
        constructor and destructor can take care of creating and destroying the sole HashMap
        member variable.

        * dom/UserActionElementSet.cpp:
        * dom/UserActionElementSet.h:

2014-02-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename convertFixedAndStickyPosition() to convertPositionStyle()
        https://bugs.webkit.org/show_bug.cgi?id=128987

        Reviewed by NOBODY. This is addressing a post-commit review from Dean Jackson.

        No new tests are necessary because there is no behavior change

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::convertPositionStyle):
        * editing/EditingStyle.h:
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):

2014-02-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164296.
        http://trac.webkit.org/changeset/164296
        https://bugs.webkit.org/show_bug.cgi?id=128989

        Broke many media tests (Requested by eric_carlson on #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:

2014-02-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Convert position:sticky to position:static upon copy and paste
        https://bugs.webkit.org/show_bug.cgi?id=128982

        Reviewed by Simon Fraser.

        This patch has two parts:

        1. Make sure that position:absolute elements trigger the position:relative wrapping (as
        well as position:fixed)
        2. Now that we copy position:sticky, convert that to position:static

        Tests: editing/pasteboard/copy-paste-converts-fixed.html
               editing/pasteboard/copy-paste-converts-sticky.html
               editing/pasteboard/copy-paste-wraps-position-absolute.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::convertFixedAndStickyPosition):

2014-02-18  David Kilzer  <ddkilzer@apple.com>

        Add type-checked casts for StyleImage and subclasses
        <http://webkit.org/b/128915>

        Reviewed by Oliver Hunt.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::detachPendingImage):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::cachedImageURL):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::detachPendingImage):
        (WebCore::CSSImageSetValue::~CSSImageSetValue):
        (WebCore::CSSImageSetValue::cachedImageSet):
        (WebCore::CSSImageSetValue::hasFailedOrCanceledSubresources):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::detachPendingImage):
        (WebCore::CSSImageValue::cachedImage):
        (WebCore::CSSImageValue::hasFailedOrCanceledSubresources):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingShapeImage):
        (WebCore::StyleResolver::loadPendingImages):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        - Switch from static_cast<>() operators to toTypeName() methods.
        - Replace 0 with nullptr where convenient.

        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:
        - Define type-checked cast macros.

2014-02-18  Sam Weinig  <sam@webkit.org>

        Simplify HTML tokenizer parameterization down to what is used
        https://bugs.webkit.org/show_bug.cgi?id=128977

        Reviewed by Alexey Proskuryakov.

        - Removes support for CustomHTMLTokenizerChunkSize.
        - Consolidates CustomHTMLTokenizerTimeDelay down to one implementation, using Settings::maxParseDuration

        * WebCore.exp.in:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::customHTMLTokenizerTimeDelay):
        * page/Page.h:

2014-02-18  Eric Carlson  <eric.carlson@apple.com>

        Do not cache media time until media engine returns a non-zero value
        https://bugs.webkit.org/show_bug.cgi?id=128976

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::refreshCachedTime): Don't mark the cached time as valid
            until it is non-zero.

2014-02-18  Mihai Tica  <mitica@adobe.com>

        [CSS Blending] Add -webkit-blend-mode support for SVG.

        https://bugs.webkit.org/show_bug.cgi?id=110427
        Reviewed by Dirk Schulze.

        Add support for blend modes to SVG. This includes adding and validating isolation for blending.
        Make masked elements isolate blending by creating a transparency layer.

        Tests: css3/compositing/svg-blend-color-burn.html
               css3/compositing/svg-blend-color-dodge.html
               css3/compositing/svg-blend-color.html
               css3/compositing/svg-blend-darken.html
               css3/compositing/svg-blend-difference.html
               css3/compositing/svg-blend-exclusion.html
               css3/compositing/svg-blend-hard-light.html
               css3/compositing/svg-blend-hue.html
               css3/compositing/svg-blend-layer-blend.html
               css3/compositing/svg-blend-layer-clip-path.html
               css3/compositing/svg-blend-layer-filter.html
               css3/compositing/svg-blend-layer-mask.html
               css3/compositing/svg-blend-layer-opacity.html
               css3/compositing/svg-blend-layer-shadow.html
               css3/compositing/svg-blend-lighten.html
               css3/compositing/svg-blend-luminosity.html
               css3/compositing/svg-blend-multiply-alpha.html
               css3/compositing/svg-blend-multiply.html
               css3/compositing/svg-blend-normal.html
               css3/compositing/svg-blend-overlay.html
               css3/compositing/svg-blend-saturation.html
               css3/compositing/svg-blend-screen.html
               css3/compositing/svg-blend-soft-light.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange): Also pass a pointer to the old style when calling SVGRenderSupport::styleChanged.
        * rendering/style/RenderStyle.h:  Add blendMode default getter when CSS_COMPOSITING is disabled.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::isolatesBlending): Add method.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::styleChanged): Call updateMaskedAncestorShouldIsolateBlending only when a blend mode is set/unset.
        (WebCore::SVGRenderSupport::isolatesBlending): Implement method that decides whether an SVGElement isolates or not blending.
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending): Traverse to the nearest ancestor having a mask.
        - Set a flag causing the creation of a transparency layer when rendering the masked element.
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent): Call GraphicsContext::setCompositeOperation.
        - Isolate blending by creating a transparency layer.
        - Isolate group when rendering a masked element having a blended child node.
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::SVGGraphicsElement): Set default m_shouldIsolateBlending to false.
        * svg/SVGGraphicsElement.h: Add m_shouldIsolateBlending member, getter and setter.
        (WebCore::SVGGraphicsElement::shouldIsolateBlending):
        (WebCore::SVGGraphicsElement::setShouldIsolateBlending):

2014-02-18  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Unreviewed fix. Correct wrong flags, ENABLE(GTK)->PLATFORM(GTK).

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::drawArraysInstanced):
        (WebCore::Extensions3DOpenGL::drawElementsInstanced):
        (WebCore::Extensions3DOpenGL::vertexAttribDivisor):

2014-02-18  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Compute region ranges for inline replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=128800

        Reviewed by Andrei Bucur.

        Tests: fast/regions/hover-content-inside-iframe-in-region.html
               fast/regions/select-multiple-in-region.html

        When asking for the range of regions for an inline replaced box,
        use the region cached on the root inline box for the inline replaced
        box as the range of regions is computed only for blocks.
        A future patch will extend the computation of region ranges
        for inline blocks too.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        Remove the restriction set during https://bugs.webkit.org/show_bug.cgi?id=113703
        and enable the code path for boxes not only for blocks.
        Method RenderFlowThread::getRegionRangeForBox returns a null region when it is unable
        to get the region range and we already check for null region case.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::getRegionRangeForBox):

2014-02-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Move inheriting method to the superclass in the JavaScript media controls
        https://bugs.webkit.org/show_bug.cgi?id=128897

        Reviewed by Jer Noble.

        The inheriting method of the JavaScript multimedia controls was
        moved from the subclasses to the superclass because this way it is
        only defined once.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.extend): Added to replace inheritFrom in the
        subclasses.
        * Modules/mediacontrols/mediaControlsGtk.js:
        * Modules/mediacontrols/mediaControlsiOS.js: Removed inheritFrom
        and used extend.

2014-02-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Fix hitting hasClass() assertion in debug with the new JS media controls
        https://bugs.webkit.org/show_bug.cgi?id=128820

        Reviewed by Martin Robinson.

        The code introduced at r164024 caused the hit of hasClass()
        assertion when getting the classNames() of an element with no
        class. Now we check for it to avoid the assertion.

        No new tests, current set detects the crash in many tests.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::nodeHasClass): Check for hasClass() in order not to hit
        the assertion when getting the classNames() in debug mode.

2014-02-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Refactor SVGPreserveAspectRatio::parse()
        https://bugs.webkit.org/show_bug.cgi?id=128658

        Reviewed by Dirk Schulze.

        To removed "goto" in SVGPreserveAspectRatio::parse(), this patch introduce parseInternal() to handle
        existing behavior with local variables, and existing/new parse() functions invoke it, then set
        those to member variables.

        Motivated from Blink: https://src.chromium.org/viewvc/blink?view=rev&revision=166927

        No new tests, no behavior change.

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):
        (WebCore::SVGPreserveAspectRatio::parseInternal):
        * svg/SVGPreserveAspectRatio.h: Add parse() and parseInternal() functions.

2014-02-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Move specific named flow methods from RenderRegion to RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=128914

        Reviewed by Antti Koivisto.

        Moved named flow specific methods regionContainer() and regionContainerLayer() from 
        RenderRegion to RenderNamedFlowFragment and renamed them to fragmentContainer and
        fragmentContainerLayer.

        No new tests required.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::fragmentContainer):
        (WebCore::RenderNamedFlowFragment::fragmentContainerLayer):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:

2014-02-17  Sangho Kim  <thomas.kim@lge.com>

        Move PublicURLMansger to std::unique_ptr.
        https://bugs.webkit.org/show_bug.cgi?id=128891

        Reviewed by Anders Carlsson.

        Use std::unique_ptr and std::make_unique in place of PassOwnPtr and adoptPtr in the PublicURLManager

        * dom/ScriptExecutionContext.h:
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::create):
        * html/PublicURLManager.h:

2014-02-17  Ricky Mondello  <rmondello@apple.com>

        Expose a way to clear cookies modified after a given date
        https://bugs.webkit.org/show_bug.cgi?id=128845

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Add a symbol.
        * platform/network/PlatformCookieJar.h: Declare deleteAllCookiesModifiedAfterDate.
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::deleteAllCookiesModifiedAfterDate): Add a stub.
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::deleteAllCookiesModifiedAfterDate): Ditto.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteAllCookiesModifiedAfterDate): Ditto.
        * platform/network/mac/CookieJarMac.mm: Add a category NSHTTPCookieStorage category with the method
            used for time-based clearing so we can build on all platforms. For now, we'll check for support
            at runtime.
        (WebCore::deleteAllCookiesModifiedAfterDate): Added. Without foundation API, we'll ignore the passed-in
            NetworkStorageSession.

2014-02-17  Benjamin Poulain  <bpoulain@apple.com>

        SelectorCompiler incorrectly saves a backtracking register for a child chain without descendant relation on the right
        https://bugs.webkit.org/show_bug.cgi?id=128944

        Reviewed by Andreas Kling.

        When resolving the backtracking relations, the value of ancestorPositionSinceDescendantRelation was incorrect for the
        rightmost child chain.
        What was happenning is updateChainStates() would increment ancestorPositionSinceDescendantRelation even if there was
        no descendant relation previously in the chain. As a result, the second SelectorFragment in the fragment chain would
        save a backtracking register.

        Previously this would just be a wasted register but since r163850, the number of registers available for compilation
        is defined by SelectorCompiler::minimumRegisterRequirements(). Since we would have one less register available than computed,
        we could run out of register and RegisterAllocator would invoke WTFCrash to avoid generating incorrect code.

        This patch fixes the issue by not updating ancestorPositionSinceDescendantRelation until the first descendant relation
        is seen. There was no need to fix the Adjacent relation because adjacentPositionSinceIndirectAdjacentTreeWalk already
        had the correct guard.

        Test: fast/selectors/querySelector-rightmost-child-chain-attribute-matching.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::updateChainStates):
        (WebCore::SelectorCompiler::isFirstAdjacent): The name was a bad copy-paste, fix it.

2014-02-17  Dean Jackson  <dino@apple.com>

        Constrain replaced element layout to from-intrinsic aspect ratio if specified
        https://bugs.webkit.org/show_bug.cgi?id=128629

        Reviewed by Simon Fraser.

        First pass at implementing -webkit-aspect-ratio: from-instrinsics;

        After RenderReplaced has done layout, attempt to update the
        resulting size to match the desired aspect ratio. This step
        will only reduce the size of an element, and never below the
        minimum dimensions.

        Tests: fast/css/aspect-ratio/columns.html
               fast/css/aspect-ratio/containers.html
               fast/css/aspect-ratio/simple.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged): If we get an update
        to our intrinsic dimensions, and layout depends on this, trigger
        another layout pass.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout): Implement the step described
        above.

2014-02-17  Sam Weinig  <sam@webkit.org>

        Fix build.

        * WebCore.exp.in:

2014-02-17  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_GLOBAL_FASTMALLOC_NEW
        https://bugs.webkit.org/show_bug.cgi?id=127067

        Reviewed by Geoffrey Garen.

        * platform/Timer.h:

2014-02-17  Sam Weinig  <sam@webkit.org>

        Move iOS only Settings into Settings.in and make them not-iOS only
        https://bugs.webkit.org/show_bug.cgi?id=128942

        Reviewed by Tim Horton.

        * page/Settings.cpp:
        * page/Settings.h:
        * page/Settings.in:

2014-02-17  Anders Carlsson  <andersca@apple.com>

        Remove view source code
        https://bugs.webkit.org/show_bug.cgi?id=127233

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * css/CSSDefaultStyleSheets.cpp:
        * css/CSSDefaultStyleSheets.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        (WebCore::DocumentRuleSets::collectFeatures):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchUARules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::styleForElement):
        * css/view-source.css: Removed.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):
        (WebCore::HTMLFrameElementBase::openURL):
        * html/HTMLFrameElementBase.h:
        * html/HTMLViewSourceDocument.cpp: Removed.
        * html/HTMLViewSourceDocument.h: Removed.
        * html/parser/HTMLToken.h:
        * html/parser/HTMLViewSourceParser.cpp: Removed.
        * html/parser/HTMLViewSourceParser.h: Removed.
        * html/parser/TextViewSourceParser.cpp: Removed.
        * html/parser/TextViewSourceParser.h: Removed.
        * inspector/InspectorOverlayPage.css:
        (.tag-name):
        (.node-id):
        (.class-name):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XMLViewer.css:
        (.tag):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2014-02-17  Simon Fraser  <simon.fraser@apple.com>

        box-shadows get truncated with a combination of transforms and clip: (affects Google Maps)
        https://bugs.webkit.org/show_bug.cgi?id=128937

        Reviewed by Dean Jackson.
        
        RenderLayer::calculateLayerBounds() incorrectly assumed that if localClipRect() returns
        a non-infinite rect, that rect is OK to use as the compositing bounds.
        
        That is not a valid assumption when clip() has a larger rect than the element (e.g.
        with negative top/left in the rect). In that case, localClipRect() still just
        returns the background rect, but we actually need a larger compositing layer
        to show the unclipped parts of descendants.
        
        Fix by detecting clip() that exceeds the renderer bounds, and when it does,
        not early returning in the UseLocalClipRectIfPossible clause.

        Test: compositing/geometry/css-clip-oversize.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localClipRect): Do a convertToLayerCoords()
        because we need offsetFromRoot later, and we can pass our value down to
        calculateRects(). Compute clipExceedsBounds based on the CSS clip rect.
        (WebCore::RenderLayer::calculateClipRects): Don't early return if clipExceedsBounds
        is true.
        * rendering/RenderLayer.h:

2014-02-17  Antti Koivisto  <antti@apple.com>

        Make TreeScope::rootNode return a reference
        https://bugs.webkit.org/show_bug.cgi?id=128934

        Reviewed by Andreas Kling.

        It is never null.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        * dom/ContainerNode.h:
        (WebCore::Node::isTreeScope):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getAllElementsById):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::moveToParentOrShadowHost):
        (WebCore::eventTargetRespectingTargetRules):
        (WebCore::shouldEventCrossShadowBoundary):
        * dom/Node.cpp:
        (WebCore::Node::containingShadowRoot):
        (WebCore::Node::removedFrom):
        * dom/ShadowRoot.h:
        (WebCore::isShadowRoot):
        * dom/TreeScope.h:
        (WebCore::TreeScope::rootNode):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::DOMSelection):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::rootNode):

2014-02-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Invalid cast in WebCore::AccessibilityTable::isDataTable (CRBug 280352)
        <https://webkit.org/b/128925>
        <rdar://problem/16087351>

        Merged from Blink (patch by Dominic Mazzoni):
        https://src.chromium.org/viewvc/blink?revision=159711&view=revision

        Reviewed by Oliver Hunt.

        Don't cast to a table cell element unless we are sure it is one.

        Test: accessibility/display-table-cell-causes-crash.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):

2014-02-17  Antti Koivisto  <antti@apple.com>

        Node constructor should take Document reference
        https://bugs.webkit.org/show_bug.cgi?id=128931

        Reviewed by Geoff Garen.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/CharacterData.h:
        (WebCore::CharacterData::CharacterData):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment):
        (WebCore::DocumentFragment::create):
        * dom/DocumentFragment.h:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::DocumentType):
        * dom/Element.h:
        (WebCore::Element::Element):
        * dom/Entity.h:
        (WebCore::Entity::Entity):
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::EntityReference):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::willBeDeletedFrom):
        * dom/Node.h:
        * dom/Notation.cpp:
        * dom/Notation.h:
        (WebCore::Notation::publicId):
        (WebCore::Notation::systemId):
        (WebCore::Notation::Notation):
        
            Remove cruft from this non-instantiated class.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/TemplateContentDocumentFragment.h:

2014-02-17  Sergio Correia  <sergio.correia@openbossa.org>

        Replace uses of PassOwnPtr/OwnPtr with std::unique_ptr in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=128681

        Reviewed by Timothy Hatcher.

        Another step towards getting rid of PassOwnPtr/OwnPtr, now targeting
        WebCore/inspector/*. Besides files in there, a few other files in
        JavaScriptCore/inspector, WebKit/, WebKit2/WebProcess/WebCoreSupport/
        and WebCore/testing were touched.

        No new tests; no new behavior.

        * WebCore.exp.in:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/DOMEditor.cpp:
        * inspector/DOMPatchSupport.cpp:
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorHistory.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        * inspector/WebConsoleAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        * testing/Internals.cpp:

2014-02-17  Antti Koivisto  <antti@apple.com>

        Rename Document::m_selfOnlyRefCount to m_referencingNodeCount
        https://bugs.webkit.org/show_bug.cgi?id=128916

        Reviewed by Andreas Kling.

        Make the name more informative. Also make it zero based (document is not considered to reference itself).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::increaseReferencingNodeCount):
        (WebCore::Document::decreaseReferencingNodeCount):
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2014-02-17  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Build failure caused by missing jsmin module
        https://bugs.webkit.org/show_bug.cgi?id=128742

        Reviewed by Philippe Normand.

        No new tests since no functionality changed.

        * GNUmakefile.am: Relocate PYTHONPATH to make it meaningful.

2014-02-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Make regions unsplittable
        https://bugs.webkit.org/show_bug.cgi?id=128811

        Reviewed by David Hyatt.

        At the moment, nested regions are not properly fragmented across regions. For the moment, 
        the regions will become unsplittable elements to avoid slicing. At a later time a proper
        fragmentation algorithm should be written, also taking into consideration pagination strut.

        Test: fast/regions/unsplittable-nested-region.html

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

2014-02-17  Simon Fraser  <simon.fraser@apple.com>

        Graphics buffer issue with clip-path and fixed positioned element
        https://bugs.webkit.org/show_bug.cgi?id=126262

        Reviewed by Tim Horton.
        
        If an element has a clip-path, backgroundIsKnownToBeOpaqueInRect() needs
        to return false so that we don't try to make opaque compositing layers.

        Test: compositing/contents-opaque/opaque-with-clip-path.html

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

2014-02-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] The box decorations of an element overflowing a region should be clipped at the border box, not the content box
        https://bugs.webkit.org/show_bug.cgi?id=128815

        Reviewed by Andrei Bucur.

        Elements flowed into a region should not be painted past the region's content box
        if they continue to flow into another region in that direction.
        If they do not continue into another region in that direction, they should be
        painted all the way to the region's border box.
        Regions with overflow:hidden will apply clip at the border box, not the content box.

        Tests: fast/regions/box-decorations-over-region-padding-fragmented.html
               fast/regions/box-decorations-over-region-padding-horiz-bt.html
               fast/regions/box-decorations-over-region-padding-vert-lr.html
               fast/regions/box-decorations-over-region-padding-vert-rl.html
               fast/regions/box-decorations-over-region-padding.html

        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::flowThreadPortionRectForClipping):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::rectFlowPortionForBox):

2014-02-17  Brendan Long  <b.long@cablelabs.com>

        DataCue.data should be a copy of the input ArrayBuffer, not a pointer
        https://bugs.webkit.org/show_bug.cgi?id=128886

        Reviewed by Eric Carlson.

        No new tests, just updated existing track-datacue.html test.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue): Add ExceptionCode and pass through to setData().
        (WebCore::DataCue::data): Return a copy of m_data instead of a pointer.
        (WebCore::DataCue::setData): Create a copy of the input data, or throw an exception if it's null.
        * html/track/DataCue.h: Add ExceptionCode parameters to constructor and data setter.
        * html/track/DataCue.idl: Same.

2014-02-17  David Kilzer  <ddkilzer@apple.com>

        CounterContentData::counter() and ImageContentData::image() should return references
        <http://webkit.org/b/128671>

        Reviewed by Darin Adler.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        - Update to use references.  Remove useless ASSERTs.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImages):
        - Update to use references.  StyleResolver::loadPendingImage()
          will be changed to take a reference in the near future.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        - Update to use references.  The auto keyword wanted to
          instantiate a StyleImage instead a reference, so it was
          replaced.

        * rendering/style/ContentData.h:
        (WebCore::ImageContentData::ImageContentData): Add ASSERT that
        m_image is not NULL.
        (WebCore::ImageContentData::image): Return a reference.  Remove
        useless overload with identical name.
        (WebCore::ImageContentData::cloneInternal): Simplify by using
        implicit PassRefPtr constructor.
        (WebCore::operator==): Remove unneeded deref operators.
        (WebCore::CounterContentData::counter): Return a reference.
        (WebCore::CounterContentData::cloneInternal): Remove unneeded
        deref operator.
        (WebCore::operator==): Remove unneeded deref operators.

2014-02-17  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Make mediacontrols match the system inline controls
        https://bugs.webkit.org/show_bug.cgi?id=128833

        Reviewed by Eric Carlson.

        Move items slightly, fix button sizes, font sizes, and colors to match the
        inline controls from MoviePlayer.framework.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (audio::-webkit-media-controls-time-remaining-display):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.configureInlineControls): Do not add the status text.
        (ControllerIOS.prototype.updateTime): Call updateProgress().
        (ControllerIOS.prototype.progressFillStyle): Draw a slightly different color.
        (ControllerIOS.prototype.updateProgress): Draw white to the left of the currentTime.
        (ControllerIOS.prototype.formatTime): Single leading zero in the time display fields.
        (ControllerIOS.prototype.handleTimelineChange): Call updateProgress().

2014-02-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Fix missing layout in flexible and content sized columns
        https://bugs.webkit.org/show_bug.cgi?id=128672

        Reviewed by Sergio Villar Senin.

        RenderGrid::logicalContentHeightForChild() is called for some items at the beginning of RenderGrid::layoutGridItems()
        from RenderGrid::computeUsedBreadthOfGridTracks(). This causes that the comparison inside the for loop in
        RenderGrid::layoutGridItems() does not detect width changes, so elements won't be marked as needsLayout.

        So the comparison is done in RenderGrid::logicalContentHeightForChild() and the element is marked to perform a layout if
        the width has changed.

        The issue can be reproduced easily with a simple grid with one flexible or content sized column, all the available width
        is not used. On top of that, when you resize the window the flexible or content sized columns are not updating their
        size properly.

        CSS Grid Layout perftest results are around 4% worse, which is expected as we're adding a missing layout.

        Test: fast/css-grid-layout/flex-content-sized-column-use-available-width.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild): Check width changes and mark element as needed layout if required.

2014-02-16  Andreas Kling  <akling@apple.com>

        Ensure that removing an iframe from the DOM tree disconnects its Frame.
        <https://webkit.org/b/128889>
        <rdar://problem/15671221>

        Merged from Blink (patch by Adam Klein):
        https://src.chromium.org/viewvc/blink?revision=156174&view=revision

        SubframeLoadingDisabler wasn't catching the case when an <iframe> was,
        in its unload handler, removed and re-added to the same parent.
        Fix this by using a count of SubframeLoadingDisablers that are on the
        stack for a given root, rather than a simple boolean.

        Test: fast/frames/reattach-in-unload.html

        * html/HTMLFrameOwnerElement.h:
        (WebCore::SubframeLoadingDisabler::disabledSubtreeRoots):

2014-02-16  Benjamin Poulain  <benjamin@webkit.org>

        When applying style, attribute value matching should be case sensitive for SVG
        https://bugs.webkit.org/show_bug.cgi?id=128882

        Reviewed by Andreas Kling.

        SelectorChecker was incorrectly matching attribute values with a case insensitve comparison
        in some cases.

        The choice to use case sensitive matching was taking into account the document type but not
        the element type. As a result, SVG (and likely MHTML) elements were incorrectly being tested
        as if they were HTML element.

        With the patch, WebKit also matches the behavior of Firefox, which is great.

        Tests: fast/css/case-insensitive-attribute-with-svg.html
               fast/selectors/querySelector-case-insensitive-attribute-match-with-svg.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):

2014-02-16  Benjamin Poulain  <benjamin@webkit.org>

        Split compilation state between querySelector and CSS matching
        https://bugs.webkit.org/show_bug.cgi?id=128869

        Reviewed by Antti Koivisto.

        Cleanup after recent changes:
        -SelectorCompiler now has a SelectorContext defining if the code is compiled for QuerySelector
         or for ElementRuleCollector.
        -Generalize m_selectorCannotMatchAnything by making it part of the FunctionType. FunctionType now
         fully represent the type of code generation and we don't rely implicitly on m_selectorFragments being
         empty.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        There is no tree marking for QuerySelector, so we can generate a simple selector
        for the sibling selectors.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        The code is split to make it simpler. The classic code generation has been moved
        to generateSelectorChecker().
        The decision on what to generate is reduced to a simple switch-case.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        The code that was previously in compile().

        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        We should not generate tree marking on querySelector traversal. Since the constructor
        now generate a SimpleChecker, it would also be incorrect to attempt to access the checkingContext
        on the stack.
        We can just skip the marking entierly.

        * cssjit/SelectorCompiler.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::execute):
        With the changes of SelectorContext, we can no longer generate a complex checker for querySelector.
        This code may come back in the future but at the moment it is useless.

2014-02-16  Benjamin Poulain  <bpoulain@apple.com>

        The FTP view is squished to the left
        https://bugs.webkit.org/show_bug.cgi?id=128856

        Reviewed by Andreas Kling.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):

2014-02-16  Jae Hyun Park  <jae.park@company100.net>

        [Coordinated Graphics] Make AreaAllocator fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=124995

        Reviewed by Anders Carlsson.

        AreaAllocator can be created and destroyed frequently (at least once per
        frame) in case of animation with changing width or height. So, it's
        better to make AreaAllocator fast allocated.

        * platform/graphics/texmap/coordinated/AreaAllocator.h:

2014-02-16  Pratik Solanki  <psolanki@apple.com>

        [iOS] WebKit crashes if text is copied to pasteboard with style containing text-shadow
        https://bugs.webkit.org/show_bug.cgi?id=128888
        <rdar://problem/16065699>

        Reviewed by Anders Carlsson.

        Use the correct class on iOS so that we don't crash.

        * platform/mac/HTMLConverter.mm:
        (_shadowForShadowStyle):

2014-02-16  Andreas Kling  <akling@apple.com>

        Atomicize frequently identical ResourceResponse string members.
        <https://webkit.org/b/128887>

        Store the mime type, text encoding and HTTP response status text in
        AtomicStrings instead of Strings to deduplicate frequently occurring
        values (e.g "text/html", "utf-8" and "OK".)

        Reviewed by Geoffrey Garen.

        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2014-02-16  Dan Bernstein  <mitz@apple.com>

        Speculative iOS build fix.

        * dom/Document.cpp:
        (WebCore::Document::Document):

2014-02-15  Antti Koivisto  <antti@apple.com>

        Move document life time management from TreeScope to Document
        https://bugs.webkit.org/show_bug.cgi?id=128877

        Reviewed by Andreas Kling.

        Document life time is managed in confusing manner by TreeScopes which are also inherited to ShadowRoots.
        
        This patches moves the life time management to Document. Nodes in shadow trees selfOnlyRef the Document instead
        of the ShadowRoot. ShadowRoot is treated like any other node and selfOnlyRefs the Document as well (which it
        also did earlier, indirectly).
        
        TreeScope is devirtualized.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        
            Author stylesheets never match in UA shadow trees.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        (WebCore::Document::selfOnlyRef):
        (WebCore::Document::selfOnlyDeref):

            To avoid branches Document self-refs itself like all other Nodes. This is why deletion will now happen on ref count of 1.

        (WebCore::Node::isDocumentNode):
        (WebCore::Node::Node):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node::document):
        (WebCore::Node::inDocument):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (WebCore::TreeScope::documentScope):
        
            Document can no longer ever be null.

        (WebCore::TreeScope::rootNode):
        (WebCore::TreeScope::setDocumentScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveShadowTreeToNewDocument):
        
            Manage Document selfOnlyRefs for nodes in shadow trees too.

        (WebCore::TreeScopeAdopter::updateTreeScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        * dom/TreeScopeAdopter.h:

2014-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        setSelectionRange shouldn't directly instantiate VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=128881

        Reviewed by Andreas Kling.

        Added a new version of moveTo for setSelectionRange.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo): Added.
        * editing/FrameSelection.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Use the newly added FrameSelection::moveTo
        instead of manually instantiating VisibleSelection here.

2014-02-16  Dan Bernstein  <mitz@apple.com>

        Stop using PLATFORM(MAC) in Source except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128885

        Reviewed by Anders Carlsson.

        * loader/FrameLoaderClient.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/Cursor.h: Changed PLATFORM(MAC) to USE(APPKIT) around uses of NSCursor.
        * platform/LocalizedStrings.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/graphics/PlatformLayer.h: Ditto.
        * platform/graphics/cg/PDFDocumentImage.cpp: Ditto.
        * rendering/RenderLayerCompositor.cpp: Ditto.
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2014-02-16  Dan Bernstein  <mitz@apple.com>

        Speculative iOS build fix after r164184.

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):

2014-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        DOMSelection shouldn't instantiate VisibleSelection everywhere
        https://bugs.webkit.org/show_bug.cgi?id=128879

        Reviewed by Antti Koivisto.

        Removed explicit instantiation of VisibleSelection from various member functions of VisibleSelection.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::addRange):

2014-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused arguments from moveTo(Range*)
        https://bugs.webkit.org/show_bug.cgi?id=128878

        Reviewed by Antti Koivisto.

        Cleanup.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMRange move:inDirection:]):
        (-[DOMRange extend:inDirection:]):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo):
        * editing/FrameSelection.h:

2014-02-15  Filip Pizlo  <fpizlo@apple.com>

        Vector with inline capacity should work with non-PODs
        https://bugs.webkit.org/show_bug.cgi?id=128864

        Reviewed by Michael Saboff.

        No new tests because no change behavior.
        
        Deques no longer have inline capacity because it was broken, and we didn't need it
        here anyway.

        * page/WheelEventDeltaTracker.h:

2014-02-15  Andreas Kling  <akling@apple.com>

        Add checked casts for Event.
        <https://webkit.org/b/128875>

        Generate casting helpers for casting from Event to various subclasses
        and go on static_cast replacement spree.

        Reviewed by Sam Weinig.

2014-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLTextFormControlElement::subtreeHasChanged should be called before updating selection
        https://bugs.webkit.org/show_bug.cgi?id=128870

        Reviewed by Darin Adler.

        Extracted HTMLTextFormControlElement::didEditInnerTextValue out of HTMLTextFormControlElement::defaultEventHandler
        and called it in appliedEditing, unappliedEditing, and reappliedEditing before updating selection.

        * editing/Editor.cpp:
        (WebCore::notifyTextFromControls): Added.
        (WebCore::Editor::appliedEditing): Update text form control's internal states before updating selection.
        (WebCore::Editor::unappliedEditing): Ditto.
        (WebCore::Editor::reappliedEditing): Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::didEditInnerTextValue):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::subtreeHasChanged): Removed a stale assertion from the time we used to do
        everything in the render tree.

2014-02-15  Andreas Kling  <akling@apple.com>

        Add checked casts for ScriptExecutionContext.
        <https://webkit.org/b/128874>

        Generate casting helpers for casting from ScriptExecutionContext to
        Document and WorkerGlobalScope. Apply heartily.

        Reviewed by Antti Koivisto.

2014-02-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] All WebKit clients should encrypt WebCrypto keys automatically
        https://bugs.webkit.org/show_bug.cgi?id=128852

        Reviewed by Oliver Hunt.

        Install a persistent master key in Keychain on first use of WebCrypto key serialization.
        The key is per application, protected with ACL.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * crypto/SerializedCryptoKeyWrap.h:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::masterKeyAccountNameForCurrentApplication):
        (WebCore::getDefaultWebCryptoMasterKey):
        (WebCore::createAndStoreMasterKey):
        (WebCore::findMasterKey):
        * platform/LocalizedStrings.cpp:
        (WebCore::webCryptoMasterKeyKeychainLabel):
        (WebCore::webCryptoMasterKeyKeychainComment):
        * platform/LocalizedStrings.h:

2014-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        computeSelectionStart and computeSelectionEnd shouldn't trigger synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=128806

        Reviewed by Darin Adler.

        Added indexForPosition to HTMLTextFormControlElement. Like r163825, this patch traverses the DOM tree
        instead of the render tree to compute the index for a given position.

        We traverse the DOM Tree backwards starting at the specified Position all the way back to the beginning
        of the inner text element. The index is computed as the number of characters we encountered during
        this backwards DOM traversal.

        It's worth noting that passedPosition.computeNodeBeforePosition() returns and only returns 0 when the
        position is before the first node of its parent or inside a text node. In such cases, we call
        passedPosition.containerNode() to find the parent or the text node.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition): Use indexForPosition.
        (WebCore::HTMLTextFormControlElement::computeSelectionStart): Ditto.
        (WebCore::HTMLTextFormControlElement::computeSelectionEnd): Dotto.
        (WebCore::finishText): Cleanup. Use newlineCharacter instead of hard-coding '\n'.
        (WebCore::HTMLTextFormControlElement::indexForPosition): Added. See above for the description.
        * html/HTMLTextFormControlElement.h:

2014-02-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Avoid unnecessary asserts if "prepareToPlay" is called multiple times.
        https://bugs.webkit.org/show_bug.cgi?id=128859

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createPlayer): Don't assert if player exists; just return the
        existing copy.
        (WebCore::AVFWrapper::createPlayerItem): Ditto (but with Player Items).

2014-02-15  Darin Adler  <darin@apple.com>

        Remove double hashing from DatasetDOMStringMap::deleteItem
        https://bugs.webkit.org/show_bug.cgi?id=128865

        Reviewed by Benjamin Poulain.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::deleteItem): Removed call to hasAttribute, using the
        result from removeAttribute instead.

        * dom/Element.cpp:
        (WebCore::Element::removeAttribute): Add a return value, false if nothing is removed,
        and true if something is removed.
        (WebCore::Element::removeAttributeNS): Ditto.
        * dom/Element.h: Ditto.

2014-02-15  Piotr Grad  <p.grad@samsung.com>

        Setting currentTime on HTMLMediaElement with media controller should throw exception.
        https://bugs.webkit.org/show_bug.cgi?id=128867.

        Reviewed by Eric Carlson.

        Added implementation for setting currentTime in HTMLMediaElement. Old implementation
        was left to be used internally.

        Test: media/video-controller-currentTime.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

2014-02-15  Anders Carlsson  <andersca@apple.com>

        Form controls are always painted in the active state
        https://bugs.webkit.org/show_bug.cgi?id=128872
        <rdar://problem/9422677>

        Reviewed by Dan Bernstein.

        AppKit will always paint form controls in the active state if the view doesn't have a
        window. Fix this by adding a fake window whose key appearance we'll update based on the 
        control state. Also, rename WebCoreFlippedView to WebCoreThemeView since it stopped being
        just about the flippedness a long time ago.

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeWindow hasKeyAppearance]):
        Return themeWindowHasKeyAppearance.

        (-[WebCoreThemeView window]):
        Create a WebCoreThemeWindow object lazily and return it.

        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        Pass the control states to ThemeMac::ensuredView.

        (WebCore::ThemeMac::ensuredView):
        Set themeWindowHasKeyAppearance based on the control state.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor):
        Pass the control states to ThemeMac::ensuredView.

2014-02-15  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        ASSERT_WITH_SECURITY_IMPLICATION in WebCore::toElement
        https://bugs.webkit.org/show_bug.cgi?id=128810

        Reviewed by Ryosuke Niwa.

        Make CompositeEditCommand::cloneParagraphUnderNewElement() to work when |outerNode|
        doesn't contain |start|.

        Before this patch, CompositeEditCommand::cloneParagraphUnderNewElement() tried to copy
        ancestry nodes from |start| to Document node when |start| position isn't in |outerNode|. This
        patch changes CompositeEditCommand::cloneParagraphUnderNewElement() to copy |start| to
        |outerNode| only if |outerNode| contains |start| position.

        Merged from Blink https://src.chromium.org/viewvc/blink?revision=161762&view=revision by yosin@chromium.org.

        Test: editing/execCommand/indent-with-uneditable-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):

2014-02-15  Samuel White  <samuel_white@apple.com>

        AX: Add ability to specify descendant type when using AXUIElementsForSearchPredicate.
        https://bugs.webkit.org/show_bug.cgi?id=128747

        Reviewed by Chris Fleizach.

        Added support for 'immediate descendant only' to existing predicate based searching. This
        addition allows VoiceOver to fetch each child element lazily (rather than all at once via AXChildren).

        Test: platform/mac/accessibility/search-predicate-immediate-descendants-only.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::findMatchingObjects):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySearchCriteria::AccessibilitySearchCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):

2014-02-15  Jeremy Jones  <jeremyj@apple.com>

        WK2 AVKit enter fullscreen doesn't work a second time.
        https://bugs.webkit.org/show_bug.cgi?id=128558

        Reviewed by Jer Noble.

        Lazily create WebAVPlayerController when needed.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit):
        (WebVideoFullscreenInterfaceAVKit::getPlayerController):
        Add getPlayerController()

        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel):
        (WebVideoFullscreenInterfaceAVKit::setDuration):
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime):
        (WebVideoFullscreenInterfaceAVKit::setRate):
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions):
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenWithCompletionHandler):
        use getPlayerController();

2014-02-15  Jer Noble  <jer.noble@apple.com>

        [Mac] 10X slower than Chrome when drawing a video into a canvas
        https://bugs.webkit.org/show_bug.cgi?id=124599

        Reviewed by Darin Adler.

        Follow up patch to r159518 to address Darin's post-commit review.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::nativeImageForCurrentTime): Use nullptr.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::nativeImageForCurrentTime): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Clear the
                AVPlayerItemVideoOutput's delegate callback.
        (WebCore::CVPixelBufferGetBytePointerCallback): Use static_cast.
        (WebCore::CVPixelBufferReleaseBytePointerCallback): Ditto.
        (WebCore::CVPixelBufferReleaseInfoCallback): Ditto.
        (-[WebCoreAVFPullDelegate initWithCallback:]): Space changes.
        (-[WebCoreAVFPullDelegate setCallback:]): Added.
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]): Check the value of m_callback.

2014-02-14  Andreas Kling  <akling@apple.com>

        CTTE: WorkerGlobalScope is always owned by a WorkerThread.
        <https://webkit.org/b/128834>

        Codify this by storing the owner thread as a WorkerThread& and making
        thread() return a reference.

        This exposed a couple of unnecessary assertions.

        Reviewed by Anders Carlsson.

        * Modules/notifications/WorkerGlobalScopeNotifications.cpp:
        (WebCore::WorkerGlobalScopeNotifications::webkitNotifications):
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createdMessagePort):
        (WebCore::ScriptExecutionContext::destroyedMessagePort):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::pauseWorkerGlobalScope):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromCache):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        (WebCore::DedicatedWorkerGlobalScope::importScripts):
        (WebCore::DedicatedWorkerGlobalScope::thread):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::create):
        (WebCore::SharedWorkerGlobalScope::SharedWorkerGlobalScope):
        (WebCore::SharedWorkerGlobalScope::thread):
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::createWorkerGlobalScope):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::CloseWorkerGlobalScopeTask::performTask):
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::postTask):
        (WebCore::WorkerGlobalScope::logExceptionToConsole):
        (WebCore::WorkerGlobalScope::addConsoleMessage):
        (WebCore::WorkerGlobalScope::addMessage):
        (WebCore::WorkerGlobalScope::isContextThread):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::thread):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerGlobalScopeTask::performTask):
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::~WorkerMessagingProxy):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::runCleanupTasks):

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        setSelectionRange shouldn't trigger a synchronous layout to check focusability when text field is already focused
        https://bugs.webkit.org/show_bug.cgi?id=128804

        Reviewed by Enrica Casucci.

        Don't trigger a synchronous layout at the beginning of setSelectionRange if the element is already focused
        since we don't have to check the size of render box in that case.

        We should be able to get rid of this synchronous layout entirely once we fix https://webkit.org/b/128797
        but that's somewhat risky behavioral change so we'll do that in a separate patch.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Fixed the bug where selectAll selects the entire document even if the text
        form contol is focused if the selection is none (i.e. not anchored to any node).
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Only update the layout if the element is not focused
        already. Also pass in DoNotSetFocus option to setSelection since we already have the focus in that case.

2014-02-14  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r157443): Search fields with a non-white background don’t have a round bezel
        https://bugs.webkit.org/show_bug.cgi?id=126295

        Reviewed by Ryosuke Niwa.

        Reverted r157443 and improved comment.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):

2014-02-14  Brian Burg  <bburg@apple.com>

        Web Replay: AtomicString replay input names should be stored in a thread-local table
        https://bugs.webkit.org/show_bug.cgi?id=128829

        Reviewed by Andreas Kling.

        Similar to how DOM event names are frequently-used AtomicStrings, replay input
        names are also checked in many places as a "type tag". This patch puts all known
        input names into a class held by ThreadGlobalData and adds the shortcut `inputTypes()`
        so that replay input types can be referenced with `inputTypes.InputName()`.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ThreadGlobalData.cpp: Add inputTypes() shortcut.
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/ThreadGlobalData.h: Add inputTypes() shortcut.
        (WebCore::ThreadGlobalData::inputTypes):
        * replay/ReplayInputTypes.cpp: Added.
        (WebCore::ReplayInputTypes::ReplayInputTypes):
        * replay/ReplayInputTypes.h: Added.
        (WebCore::inputTypes): The input names are provided by per-framework macros that
        are generated by the replay inputs code generator.

2014-02-14  Jer Noble  <jer.noble@apple.com>

        Add support for specced event handlers to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=128292

        Reviewed by Andreas Kling.

        Test: media/media-event-listeners.html

        Add explicit event listener IDL attributes to HTMLMediaElement.

        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

2014-02-14  Oliver Hunt  <oliver@apple.com>

        Implement a few more Array prototype functions in JS
        https://bugs.webkit.org/show_bug.cgi?id=128788

        Reviewed by Gavin Barraclough.

        Minor change to ensure that the inspector is treating builtins
        as host functions.

        Tests: js/regress/array-prototype-filter.html
               js/regress/array-prototype-forEach.html
               js/regress/array-prototype-map.html
               js/regress/array-prototype-some.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
          Make sure we treat builtins as regular host functions

2014-02-14  Beth Dakin  <bdakin@apple.com>

        Margin tiles are not created for the top and left sides when there is a < 1.0 
        scale factor
        https://bugs.webkit.org/show_bug.cgi?id=128842

        Reviewed by Simon Fraser.

        floor the result of the computation whenever we have a negative origin, to ensure 
        that we are rounding 'up' to a larger number of tiles. 
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::getTileIndexRangeForRect):

2014-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        setSelection should not synchronously trigger layout
        https://bugs.webkit.org/show_bug.cgi?id=128797

        Reviewed by Antti Koivisto.

        Only update the appearance and reveal selection when the style and the layout is already up to date.
        Otherwise, do so in performPostLayoutTasks.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelection): Set m_pendingSelectionUpdate and synchronously update caret rect
        if we don't need to update style or layout.
        (WebCore::updateSelectionByUpdatingLayoutOrStyle): Added. Used by FrameSelection member functions to
        trigger layout or style recalc whichever is needed.
        (WebCore::FrameSelection::updateAndRevealSelection): Extracted from setSelection.
        (WebCore::FrameSelection::absoluteCaretBounds): Call updateSelectionByUpdatingLayoutOrStyle since caret rect
        is no longer updated synchronously in setSelection.
        (WebCore::FrameSelection::recomputeCaretRect): Don't assert that visibleStart().absoluteCaretBounds() is
        equal to m_absCaretBounds since selection may no longer be caret at this point.
        (WebCore::FrameSelection::setCaretVisibility): Call updateSelectionByUpdatingLayoutOrStyle since we're
        synchronously calling into updateAppearance here. In the future, we should make this asynchronous as well.
        (WebCore::FrameSelection::selectionBounds): Call updateSelectionByUpdatingLayoutOrStyle since selection bounds
        could be outdated. This code only triggering style recalc was presumably a bug.
        * editing/FrameSelection.h:

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): Update selection's appearance and scroll to reveal selection
        as needed.

2014-02-14  Andreas Kling  <akling@apple.com>

        Purge remaining ENABLE(SHADOW_DOM) cruft.
        <https://webkit.org/b/128827>

        Remove the remaining 8.8 million lines of Shadow DOM code to align
        with goals for intent to ship 60fps on mobile in 2014.

        Reviewed by Antti Koivisto.

2014-02-13  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Embedded YouTube does not show a 'paused' button state after starting
        https://bugs.webkit.org/show_bug.cgi?id=128755

        Reviewed by Eric Carlson.

        Don't rely on "canPlay()", instead, take the information directly from the event itself. I.e., when
        handling the 'play' event, switch mode to playing, and vice versa for the 'pause' event.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePlay):
        (Controller.prototype.handlePause):
        (Controller.prototype.updatePlaying):
        (Controller.prototype.setPlaying):

2014-02-13  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Start playback button is visible when playing embedded YouTube
        https://bugs.webkit.org/show_bug.cgi?id=128754

        Reviewed by Eric Carlson.

        Update shouldHaveStartPlaybackButton to match the behavior of the plugin proxy.

        Add a accessor to determine whether playback has been requested:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::userGestureRequired):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        Update the logic of shouldHaveStartPlaybackButton.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton):

2014-02-13  Jer Noble  <jer.noble@apple.com>

        [MediaControls] Add support for a loading progress meter
        https://bugs.webkit.org/show_bug.cgi?id=128651

        Reviewed by Eric Carlson.

        Draw the loaded ranges underneath the timeline slider. Use a -webkit-canvas()
        CSS function to allow the track of the slider to reflect the current state of
        the video's loadedTimeRanges property.

        Since -webkit-canvas() will share a backing store with all other CSS images using
        the same identifier, use a monotonically increasing identifier to uniquely identify the timeline on a per-document basis.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-timeline):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Call updateProgress().
        (Controller.prototype.createControls): Set up the canvas style and identifier.
        (Controller.prototype.handleLoadStart): Call updateProgress().
        (Controller.prototype.handleStalled): Ditto.
        (Controller.prototype.handleReadyStateChange): Ditto.
        (Controller.prototype.handleDurationChange): Ditto.
        (Controller.prototype.handleProgress): Ditto.
        (Controller.prototype.progressFillStyle): Added an easily overridable method
            to determine the fill color of the progress bar.
        (Controller.prototype.updateProgress): Draw the loadedTimeRanges into the timeline slider.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.progressFillStyle): Override.

2014-02-14  Benjamin Poulain  <benjamin@webkit.org>

        Clean up JSDOMStringMap::deleteProperty
        https://bugs.webkit.org/show_bug.cgi?id=128801

        Reviewed by Geoffrey Garen.

        Follow up on my cleaning of JSDOMStringMapCustom, this time for deletion.

        Previously, we would query for the name, then call deleteItem() if the name was
        found. Instead, everything is moved to deleteItem which then return if the deletion
        is successful or not.

        By using convertPropertyNameToAttributeName, we can use Element::hasAttribute() directly
        to find if the attribute exists or not. If it exists, we remove it.

        Theoretically we could have a single pass over the attributes to find->delete but this
        code is not hot enough to justify anything fancy at this point.

        Finally, we no longer check for isValidPropertyName() on deletion. JSDOMStringMapCustom
        was the last client of DatasetDOMStringMap::deleteItem() and it could not call deleteItem()
        with invalid name since the name would have failed DatasetDOMStringMap::contains().
        The spec does not specify any name checking either for deletion so we are safe just ignoring
        invalid input.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::deleteProperty):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::deleteItem):
        * dom/DatasetDOMStringMap.h:

2014-02-14  Benjamin Poulain  <bpoulain@apple.com>

        Improve the performance on mobile of FTPDirectoryDocument
        https://bugs.webkit.org/show_bug.cgi?id=128778

        Reviewed by Antti Koivisto.

        Little cleanup.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::appendEntry):
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename):
        (WebCore::processFilesizeString):
        (WebCore::wasLastDayOfMonth):
        (WebCore::processFileDateString):
        (WebCore::FTPDirectoryDocumentParser::parseAndAppendOneLine):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):

2014-02-14  Benjamin Poulain  <benjamin@webkit.org>

        Do not attempt to synchronize attributes when no Simple Selector could match an animatable attribute
        https://bugs.webkit.org/show_bug.cgi?id=128728

        Reviewed by Andreas Kling.

        In most cases, we don't even need to test for the flag animatedSVGAttributesNotDirty.
        If the selector filter could never match an animatable attribute, there is no point in testing for one.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::canMatchStyleAttribute):
        Skip the second test when the local name is equal to canonicalLocalName. That is the common case.

        (WebCore::SelectorCompiler::canMatchAnimatableSVGAttribute):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributesMatching):

        * svg/SVGElement.cpp:
        (WebCore::addQualifiedName):
        (WebCore::SVGElement::animatableAttributeForName):
        (WebCore::SVGElement::isAnimatableAttribute):
        (WebCore::SVGElement::filterOutAnimatableAttribute):
        * svg/SVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::filterOutAnimatableAttribute):
        * svg/SVGScriptElement.h:
        Move the list of animatable attribute to a static function available in Release.
        Selector matching is a lot more flexible than normal name matching. Since the local name must
        always match, it is used as a key to get the full QualifiedName to compare to the selector.

        Separating the list of animatable attributes between Selectors and SVGElement::isAnimatableAttribute
        would be error prone. Instead, SVGElement::isAnimatableAttribute() is modified to use
        SVGElement::animatableAttributeForName so that the two never get out of sync.

        Since SVGScriptElement has one additional restriction to isAnimatableAttribute(), the function
        filterOutAnimatableAttribute() is added to remove a qualified name from the complete list of animatable attributes.
        This ensure SVGElement::animatableAttributeForName() always has the complete list, and subclasses of SVGElement
        can only remove QualifiedNames, not add them.

2014-02-14  Benjamin Poulain  <benjamin@webkit.org>

        Make code generation of the unoptimized pseudo classes separate
        https://bugs.webkit.org/show_bug.cgi?id=128704

        Reviewed by Andreas Kling.

        Mapping the unoptimized selectors when generating the code was useful for debugging
        but those cases are so common that looping over unoptimizedPseudoCheckers was more
        costly than anticipated.

        This patch moves the unoptimized pseudo selector in their own array to simplify code generation.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):

2014-02-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement text-decoration-skip: auto
        https://bugs.webkit.org/show_bug.cgi?id=128786

        Reviewed by Dean Jackson.

        http://lists.w3.org/Archives/Public/www-style/2014Feb/0485.html
        We are updating the initial value of text-decoration-skip to a new value, "auto".
        On Mac + iOS, this will have the same behavior as "skip".

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-default.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::valueToDecorationSkip):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2014-02-13  Simon Fraser  <simon.fraser@apple.com>

        Give ScrollingTree(State)Nodes a reference to another layer, which is used for moving overflow:scroll contents around
        https://bugs.webkit.org/show_bug.cgi?id=128790

        Reviewed by Beth Dakin.

        Have scrolling tree nodes and state nodes track another layer, the
        "scrolled contents layer", for accelerated overflow:scroll.
        
        When making ScrollingTreeScrollingNodes for overflow:scroll, the node's
        layer will point to the composited element's primary layer, and its
        scrolledContentsLayer to the layer that gets moved around by scrolling.
        
        Do some other cleanup on AsyncScrollingCoordinator, removing
        functions that just called through to nodes.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):

2014-02-14  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit needs heuristics to differentiate lists used for layout from semantic data lists, similar to the heuristics for layout tables versus data tables.
        https://bugs.webkit.org/show_bug.cgi?id=122320

        Reviewed by Mario Sanchez Prada.

        Many authors use lists for layout, rather than presenting data. Exposing these kinds of lists to accessibility users
        makes the web harder to process and listen, while degrading the importance of real lists.

        This introduces heuristics to filter out layout lists with the following:
           1. If it's a named list, like ol or aria=list, then it's a list.
             1a. Unless the list has no children, then it's not a list.
           2. If it displays visible list markers, it's a list.
           3. If it does not display list markers and has only one child, it's not a list.
           4. If it does not have any listitem children, it's not a list.
           5. Otherwise it's a list (for now).

        Test: accessibility/list-detection.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::determineAccessibilityRole):
        (WebCore::AccessibilityList::roleValue):
        * accessibility/AccessibilityList.h:

2014-02-14  Brendan Long  <b.long@cablelabs.com>

        Use AtomicString arguments in TrackPrivateBaseClient callbacks
        https://bugs.webkit.org/show_bug.cgi?id=128765

        Reviewed by Eric Carlson.

        No new tests because this doesn't change functionality.

        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::idChanged):
        (WebCore::AudioTrack::labelChanged):
        (WebCore::AudioTrack::languageChanged):
        * html/track/AudioTrack.h:
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack):
        (WebCore::InbandTextTrack::idChanged):
        (WebCore::InbandTextTrack::labelChanged):
        (WebCore::InbandTextTrack::languageChanged):
        * html/track/InbandTextTrack.h:
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::idChanged):
        (WebCore::VideoTrack::labelChanged):
        (WebCore::VideoTrack::languageChanged):
        * html/track/VideoTrack.h:
        * platform/graphics/TrackPrivateBase.h:

2014-02-14  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        ASSERTION FAILED: comparePositions(newEnd, newStart) >= 0 in WebCore::ApplyStyleCommand::updateStartEnd
        https://bugs.webkit.org/show_bug.cgi?id=121791

        Reviewed by Darin Adler.

        If WebCore::ApplyStyleCommand::applyBlockStyle() creates a TextIterator for a range
        that has an element with ReplacedElement rendering object, then a ',' is emitted in the
        constructor of TextIterator. Due to this comma the end of the run range can be at the
        wrong position, what makes the assertion fire. This situation can be handled the same
        way in TextIterator::rangeFromLocationAndLength() as we do in case of the emitted '\n's.

        Test: editing/execCommand/remove-formatting-from-iframe-in-button.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):

2014-02-14  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] visibility: hidden on a region should hide its content
        https://bugs.webkit.org/show_bug.cgi?id=128814

        Reviewed by Mihnea Ovidenie.

        The patch properly checks that the content of a region layer should be painted before actually
        calling the paint function (for example, when visibility: hidden is specified on a region, its
        content should be hidden).

        Test: fast/regions/visibility-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2014-02-14  László Langó  <llango.u-szeged@partner.samsung.com>

        Follow-up fix after r164036.

        Reviewed by Csaba Osztrogonác.

        * dom/Document.cpp:
        (WebCore::Document::create):

2014-02-13  Byungseon Shin  <sun.shin@lge.com>

        [MSE] Move PublicURLManager shutdown logic so ActiveDOMObjects associated with public URLs won't leak.
        https://bugs.webkit.org/show_bug.cgi?id=128532

        Reviewed by Jer Noble.

        This fixes a leak of DOM objects by breaking the circular reference 
        between Document, PublicURLManager, and MediaSource. 
        Instead of clearing PublicURLManager at destruction-time, 
        which is delayed indefinitely because of the circular reference, 
        clear the PublicURLManager during ActiveDOMObject::stop().

        Frome Blink r151890 by <acolwell@chromium.org>
        <https://src.chromium.org/viewvc/blink?view=rev&revision=151890>

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::publicURLManager):
        * html/DOMURL.h:
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::create):
        (WebCore::PublicURLManager::PublicURLManager):
        (WebCore::PublicURLManager::registerURL):
        (WebCore::PublicURLManager::stop):
        * html/PublicURLManager.h:

2014-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove position:sticky runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=128774

        Reviewed by Simon Fraser.

        Rollout of r128663

        No new tests are necessary because there is no behavior change.

        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSParserMode.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2014-02-04  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK][CMake] Generate GObject DOM bindings .symbols files
        https://bugs.webkit.org/show_bug.cgi?id=126210

        Reviewed by Martin Robinson.

        No new tests. Build change only.

        * CMakeLists.txt: list Quota module files and IDLs even if the feature
        is disabled, for GTK, since we rely on that for our DOM bindings.
        * PlatformGTK.cmake: add a new target to check for DOM symbols API by
        running the new python script.
        * bindings/gobject/GNUmakefile.am: call the new python script instead
        of using a custom rule.

2014-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        text-decoration-skip: ink skips randomly when using SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=128709

        Reviewed by Simon Fraser.

        This patch simply disables skipping underlines being used with SVG fonts.
        It's a stopgap until we can support skipping properly with SVG fonts.

        Test: svg/custom/svg-fonts-skip-ink.html

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):

2014-02-13  Daniel Bates  <dabates@apple.com>

        Fix the ARM build when HAVE_ARM_NEON_INTRINSICS is enabled

        Add !HAVE(ARM_NEON_INTRINSICS)-guard around file-level inline function arithmeticSoftware to
        avoid an unused function compiler warning when building with ARM Neon intrinsics.

        * platform/graphics/filters/FEComposite.cpp:

2014-02-13  Brady Eidson  <beidson@apple.com>

        IDB: Three tests crash the DatabaseProcess under ~KeyedDecoder
        https://bugs.webkit.org/show_bug.cgi?id=128763

        Reviewed by Anders Carlsson.

        No new tests (Covered by three existing tests)

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObjects): If the array is empty we still have to begin() and end() it.

2014-02-13  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        [css3-text] Support -webkit-text-decoration-skip: objects
        https://bugs.webkit.org/show_bug.cgi?id=128723

        Reviewed by Dean Jackson.

        Implemented 'objects' value of text-decoration-skip.
        http://www.w3.org/TR/2013/CR-css-text-decor-3-20130801/#text-decoration-skip

        This is initial value and same behavior without
        ENABLE_CSS3_TEXT_DECORATION_SKIP_INK flag. Threfore, this patch only
        added parser code and constant for 'objects'.

        Changed the initial value of text-decoration-skip.

        The current implementation parses 'none', but the rendering code is
        not match the spec, so this patch added FIXME to the rendering code.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::valueToDecorationSkip):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2014-02-13  Daniel Bates  <dabates@apple.com>

        Fix ARM NEON build following <http://trac.webkit.org/changeset/164058>
        (https://bugs.webkit.org/show_bug.cgi?id=128767)

        I inadvertently didn't include header NEONHelpers.h, which defines WebCore::loadRGBA8AsFloat().

        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h:

2014-02-13  Daniel Bates  <dabates@apple.com>

        Write FEComposite::computeArithmeticPixelsNeon() in terms of loadRGBA8AsFloat()
        https://bugs.webkit.org/show_bug.cgi?id=128767

        Reviewed by Dean Jackson.

        This patch was inspired by Gabor Rapcsanyi's work in <https://bugs.webkit.org/show_bug.cgi?id=90669>.

        Currently we duplicate code in FEComposite::computeArithmeticPixelsNeon() to read pixel data.
        Instead we should use the convenience function WebCore::loadRGBA8AsFloat. This also resolves
        an uninitialized variable compiler warning in the existing code.

        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h:
        (WebCore::FEComposite::computeArithmeticPixelsNeon):

2014-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        During a copy, position:fixed gets converted to position:absolute even if only part of the document is selected
        https://bugs.webkit.org/show_bug.cgi?id=128688

        Reviewed by Ryosuke Niwa.

        Adds a field, m_needsPositionStyleConversion, to StyledMarkupAccumulator.

        Also, renames the ConvertPositionStyleOnCopy setting to ShouldConvertPositionStyleOnCopy

        Test: editing/pasteboard/copy-paste-doesnt-convert-sticky-and-fixed-during-partial-copy.html

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::createMarkupInternal):
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldConvertPositionStyleOnCopy):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Enable inspection of recently used IndexedDB databases.

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

        Reviewed by Brady Eidson & Joseph Pecoraro.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getDatabaseNames):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::getDatabaseNames):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        Fix up the arguments passed to getDatabaseNames.

        * WebCore.xcodeproj/project.pbxproj:
        Make DOMStringList.h private so WebKit2 can use it.

        * inspector/InspectorIndexedDBAgent.cpp:
        Modernize the loops and remove some PLATFORM(COCOA) ifdefs to
        compile the code. 

        * inspector/protocol/IndexedDB.json: Use number for version to
        allow larger values instead of clamping to int.

2014-02-13  Chang Shu  <cshu@webkit.org>

        Copying (createMarkup) wrapping text results in space between wrapped lines stripped.
        https://bugs.webkit.org/show_bug.cgi?id=63233

        The problem is StyledMarkupAccumulator uses renderedText and the space at
        the end of the text has been stripped when the tag after the text was wrapped.

        Reviewed by Ryosuke Niwa.

        Test: editing/pasteboard/copy-text-with-wrapped-tag.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::handleTextBox):
        * editing/TextIterator.h:
        Check the special case when the iterator runs over a range that is followed by a non-text box.
        In this case, the possible last space has been collapsed and needs to be restored.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText):
        Check if the range is followed by more nodes and pass this information to the constructed TextIterator.

2014-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Gaps for text-decoration-skip: ink are calculated assuming the glyph orientation is the same as the run orientation
        https://bugs.webkit.org/show_bug.cgi?id=128718

        Reviewed by Darin Adler.

        This is a stop-gap patch to make underlines in CJK text not look terrible. A long-term fix is to refactor
        showGlyphsWithAdvances to move rotation logic into a common place that the text-decoration-skip: ink code
        can use.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-orientation-upright.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2014-02-13  Andreas Kling  <akling@apple.com>

        InsertIntoTextNodeCommand should get Settings from the Frame.
        <https://webkit.org/b/128678>

        EditCommands have a frame() accessor that returns a reference,
        so there's no need to go through Document.

        Reviewed by Anders Carlsson.

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):

2014-02-13  László Langó  <llango.u-szeged@partner.samsung.com>

        Document should be constructable
        https://bugs.webkit.org/show_bug.cgi?id=115643

        Reviewed by Darin Adler.

        http://www.w3.org/TR/2014/WD-dom-20140204/#interface-document
        Make Document constructable so that one can do "new Document"
        instead of "document.implementation.createHTMLDocument('')".

        Test: fast/dom/Document/document-constructor.html

        * dom/Document.cpp:
        (WebCore::Document::create):
        (WebCore::Document::origin):
        * dom/Document.h:
        * dom/Document.idl:

2014-02-13  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Rename named areas property
        https://bugs.webkit.org/show_bug.cgi?id=127990

        Reviewed by Sergio Villar Senin.

        From Blink r165891 by <rego@igalia.com>

        The property 'grid-template' has been renamed to 'grid-template-areas'
        in the last two versions of the spec.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGridTemplateAreasValue.cpp: Renamed from Source/WebCore/css/CSSGridTemplateValue.cpp.
        (WebCore::CSSGridTemplateAreasValue::CSSGridTemplateAreasValue):
        (WebCore::stringForPosition):
        (WebCore::CSSGridTemplateAreasValue::customCSSText):
        * css/CSSGridTemplateAreasValue.h: Renamed from Source/WebCore/css/CSSGridTemplateValue.h.
        (WebCore::CSSGridTemplateAreasValue::create):
        (WebCore::CSSGridTemplateAreasValue::~CSSGridTemplateAreasValue):
        (WebCore::CSSGridTemplateAreasValue::gridAreaMap):
        (WebCore::CSSGridTemplateAreasValue::rowCount):
        (WebCore::CSSGridTemplateAreasValue::columnCount):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTemplateAreas):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isGridTemplateAreasValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-02-13  Adrian Bunk  <bunk@stusta.de>

        Remove the last remnants of Maemo support
        https://bugs.webkit.org/show_bug.cgi?id=85238

        Reviewed by Ryosuke Niwa.

        * plugins/npapi.h:

2014-02-13  ChangSeok Oh  <changseok.oh@collabora.com>

        Support ANGLE_instanced_arrays for GLES backend.
        https://bugs.webkit.org/show_bug.cgi?id=128579

        Reviewed by Dean Jackson.

        Add some APIs to Extensions3D to support ANGLE_instanced_arrays for GLES backend.
        At the same time, drawArraysInstanced, drawElementsInstanced and vertexAttribDivisor
        are moved from GC3DOpenGL.cpp to GC3DOpenGLCommon.cpp since they could be shareable
        through Extensions3D.

        Covered by fast/canvas/webgl/angle-instanced-arrays.html

        * platform/graphics/Extensions3D.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::drawArraysInstanced):
        (WebCore::Extensions3DOpenGL::drawElementsInstanced):
        (WebCore::Extensions3DOpenGL::vertexAttribDivisor):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::Extensions3DOpenGLES):
        (WebCore::Extensions3DOpenGLES::drawArraysInstanced):
        (WebCore::Extensions3DOpenGLES::drawElementsInstanced):
        (WebCore::Extensions3DOpenGLES::vertexAttribDivisor):
        (WebCore::Extensions3DOpenGLES::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:

2014-02-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] MEDIA_CONTROLS_SCRIPT support
        https://bugs.webkit.org/show_bug.cgi?id=123097

        Reviewed by Jer Noble.

        WebKitGTK+ multimedia controls are now managed from Javascript
        code. Apple controls are kept as common code and GTK+ ones are
        subclassed for the specific behavior.

        Both CMake and Autotools build support is provided.

        * CMakeLists.txt: Added support to build the media controls
        script and their associated files.
        * GNUmakefile.am: Added support to generate the C++ code from the
        Javascript.
        * GNUmakefile.list.am: Added the media controls script associated
        files.
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        (WebCore::MediaControlsHost::supportsFullscreen): Added attribute
        to know if the element supports fullscreen.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.handleWrapperMouseOut):
        (Controller.prototype.updatePlaying): Use clear and
        resetHideControlsTimer.
        (Controller.prototype.clearHideControlsTimer): Added.
        (Controller.prototype.resetHideControlsTimer): Added.
        * Modules/mediacontrols/mediaControlsGtk.js: Added.
        (createControls): Calls ControllerGtk.
        (ControllerGtk): Calls the superclass.
        (contains): Defines a function to know if an object is contained
        in an array.
        (ControllerGtk.prototype.inheritFrom): Copies the method of the
        superclass that are not reimplemented in the subclass.
        (ControllerGtk.prototype.createControls): Calls the superclass and
        create the remaining needed elements.
        (ControllerGtk.prototype.configureInlineControls): Configures the
        controls.
        (ControllerGtk.prototype.setStatusHidden): Redefined empty.
        (ControllerGtk.prototype.updateTime): Writes the duration and
        current position. As it was so far, current time also includes
        duration. If current time is bigger than 0 we show that.
        (ControllerGtk.prototype.showCurrentTime): Shows current time and
        hides duration label (that is included in current time).
        (ControllerGtk.prototype.handlePlay): Calls the superclass and
        force showing the current time.
        (ControllerGtk.prototype.handleTimeUpdate): Always update the
        time.
        (ControllerGtk.prototype.handleMuteButtonMouseOver): Shows the
        volume slider.
        (ControllerGtk.prototype.handleVolumeBoxMouseOut): Hides the
        volume slider.
        (ControllerGtk.prototype.addControls): Adds the enclosure instead
        of the panel directly. Panel is, of course, part of the enclosure.
        (ControllerGtk.prototype.updateReadyState): Shows the fullscreen
        button only if fullscreen is supported. Sets the volume in up or
        down mode depending on its position in the document. Updates the
        volume.
        (ControllerGtk.prototype.setControlsType): Creates the controls it
        they were not created before. Unlike Apple ones, WebKitGTK+
        fullscreen and inline controls are the same.
        (ControllerGtk.prototype.updatePlaying): Calls the superclass and
        shows the controls if not playing.
        (ControllerGtk.prototype.handleCaptionButtonClicked): Redefined
        empty. To be coherent with volume, that also shows a popup, this
        is handled with mouseover instead of click.
        (ControllerGtk.prototype.buildCaptionMenu): Calls the superclass
        to build the menu, sets some listeners, centers the popup with the
        captions button, keeps the current height and sets the style to 0,
        which is needed to animate it.
        (ControllerGtk.prototype.destroyCaptionMenu): Hides the caption menu.
        (ControllerGtk.prototype.showCaptionMenu): Resets the height to
        its original. We don't animate it with CSS because we would need
        to specify a height in the style and we don't know it in advance.
        (ControllerGtk.prototype.hideCaptionMenu): Sets height to 0.
        (ControllerGtk.prototype.captionMenuTransitionEnd): When the
        captions menu transtition ends, it is destroyed.
        (ControllerGtk.prototype.handleCaptionButtonMouseOver): Creates
        the caption menu and shows it.
        (ControllerGtk.prototype.handleCaptionButtonMouseOut): Hides the
        captions menu.
        (ControllerGtk.prototype.handleCaptionMouseOut): Hides the
        captions menu.
        * PlatformGTK.cmake: Added WebCore to the target link libraries
        and initialized the variables needed at CMakelists.txt
        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-panel)
        (video::-webkit-media-controls-panel): Added transtion based on opacity.
        (video::-webkit-media-controls-panel): Set video opacity to 0.
        (video::-webkit-media-controls-panel.paused): Set video opacity to 1.
        (audio::-webkit-media-controls-panel div.mute-box): Set the same
        style as the mute button to preserve the layout.
        (audio::-webkit-media-controls-panel div.mute-box.hidden): Sets
        the display to none.
        (audio::-webkit-media-controls-mute-button)
        (video::-webkit-media-controls-mute-button): Removed the outline
        and the margin that is managed by the mute box now.
        (audio::-webkit-media-controls-play-button)
        (video::-webkit-media-controls-play-button): Removed the outline.
        (audio::-webkit-media-controls-time-remaining-display)
        (video::-webkit-media-controls-time-remaining-display): Removed
        the display.
        (audio::-webkit-media-controls-current-time-display)
        (video::-webkit-media-controls-current-time-display): Added the
        display block.
        (video::-webkit-media-controls-time-remaining-display): Set
        display none.
        (video::-webkit-media-controls-time-remaining-display.show): Set
        display block.
        (video::-webkit-media-controls-time-remaining-display.hidden): Set
        display none.
        (audio::-webkit-media-controls-timeline)
        (video::-webkit-media-controls-timeline): Removed outline.
        (audio::-webkit-media-controls-volume-slider-container)
        (video::-webkit-media-controls-volume-slider-container): Set
        overflow hidden and set a transition by height.
        (video::-webkit-media-controls-volume-slider-container.hidden):
        Set height 0.
        (video::-webkit-media-controls-volume-slider-container.down): Set
        bottom to be below the panel. Changed the border radius and
        transition accordingly.
        (video::-webkit-media-controls-panel .hidden.down): Sets default
        bottom as 0.
        (audio::-webkit-media-controls-volume-slider)
        (video::-webkit-media-controls-volume-slider): Removed the outline.
        (audio::-webkit-media-controls-toggle-closed-captions-button)
        (video::-webkit-media-controls-toggle-closed-captions-button):
        Removed the background that is painted from C++ and removed the
        outline.
        (video::-webkit-media-controls-closed-captions-container):
        (video::-webkit-media-controls-closed-captions-container h3):
        (video::-webkit-media-controls-closed-captions-container ul):
        (video::-webkit-media-controls-closed-captions-container li):
        (video::-webkit-media-controls-closed-captions-container li.selected): Changed
        the style to make it more coherent with the rest of the controls.
        (audio::-webkit-media-controls-fullscreen-button)
        (video::-webkit-media-controls-fullscreen-button): Removed the outline.
        (audio::-webkit-media-controls-panel button.hidden): Sets the
        display to none.
        * html/HTMLMediaElement.cpp: UserAgentScripts.h is not needed here
        and build cmake build would need for changes to get this compiled.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::nodeHasPseudo): Added. Checks if a node has a certain
        pseudo.
        (WebCore::nodeHasClass): Added. Checks if a node has a certain
        class.
        (WebCore::supportsFocus): Removed some element types as outline is
        now handled in CSS.
        (WebCore::RenderThemeGtk::paintMediaPlayButton): Checks if the
        play button has the class paused to show the play icon instead of
        the pause one.
        (WebCore::RenderThemeGtk::paintMediaToggleClosedCaptionsButton):
        Added. Paints the captions icon.
        (WebCore::RenderThemeGtk::mediaControlsScript): Added. Loads the
        bundled scripts.
        * platform/gtk/RenderThemeGtk.h: Added the mediaControlsScript
        method and declared the redefinition of the method to play the
        captions icon.

2014-02-11  Alexey Proskuryakov  <ap@apple.com>

        Don't crash when SerializedScriptValue deserialization fails
        https://bugs.webkit.org/show_bug.cgi?id=128657

        Reviewed by Oliver Hunt.

        Test: crypto/subtle/postMessage-worker.html

        * bindings/js/JSMessageEventCustom.cpp: (WebCore::JSMessageEvent::data): Added a FIXME.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneBase::fail): Don't assert on failure.
        (WebCore::SerializedScriptValue::deserialize): Never return a null JSValue, these
        are not allowed.

2014-02-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Rename shapeSize and others to make ShapeInfo and friends easier to understand
        https://bugs.webkit.org/show_bug.cgi?id=128685

        Reviewed by Alexandru Chiculita.

        The ShapeInfo hierarchy has grown organically as the spec has changed,
        and the naming has become very stale and confusing. The spec is now in
        Last Call, so it seems like a good time to take a stab towards better
        naming that matches the spec terminology and is also more consistent
        in general.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged): Use new names.
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange): Ditto.
        (WebCore::shapeInfoRequiresRelayout): Ditto.
        (WebCore::RenderBlock::computeShapeSize): Ditto.
        (WebCore::RenderBlock::updateShapesAfterBlockLayout): Ditto.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalSizeForChild): This method makes it much
            cleaner to set the reference box size.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionNewFloats): Use new names.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange): Ditto.
        (WebCore::RenderBox::imageChanged): Ditto.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::getShapeImageMarginRect): Rename variables.
        (WebCore::ShapeInfo<RenderType>::computedShape): More renames.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setReferenceBoxLogicalSize): Renamed from
            setShapeSize.
        (WebCore::ShapeInfo::logicalLineTop): Use new names.
        (WebCore::ShapeInfo::logicalLineBottom): Ditto.
        (WebCore::ShapeInfo::shapeContainingBlockLogicalHeight): Ditto.
        (WebCore::ShapeInfo::markShapeAsDirty): Renamed from dirtyShapeSize.
        (WebCore::ShapeInfo::isShapeDirty): Renamed from shapeSizeDirty.
        (WebCore::ShapeInfo::referenceBoxLogicalSize): Renamed from shapeSize.
        (WebCore::ShapeInfo::logicalTopOffset): Use new names.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::updateSegmentsForLine): Ditto.
        (WebCore::ShapeInsideInfo::adjustLogicalLineTop): Ditto.
        (WebCore::ShapeInsideInfo::computeFirstFitPositionForFloat): Ditto.
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine): Ditto.
        * rendering/shapes/ShapeOutsideInfo.h:

2014-02-12  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION: Crashing/Broken Tests Due To Unexpected 8-bit Character Data
        https://bugs.webkit.org/show_bug.cgi?id=128698

        Reviewed by Tim Horton.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance): Make 16-bit copy when needed.
        (WebCore::UniscribeController::shapeAndPlaceItem): Handle 8-bit case when checking
        for word boundaries.

2014-02-12  Benjamin Poulain  <bpoulain@apple.com>

        Document::childrenChanged does not necessarily have a page

        Rubber stamped by Enrica Casucci.

        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):

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

        Add a missing ": " between the URL and exception in STDOUT logs.

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

        Reviewed by Joseph Pecoraro.

        * page/PageConsole.cpp:
        (WebCore::PageConsole::addMessage): Print ": " after calling
        printSourceURLAndPosition now that it does not print it for us.

2014-02-12  Enrica Casucci  <enrica@apple.com>

        WK2: coordinate mapping for frames does not work when the page is scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=128690
        <rdar://problem/16042925>

        Reviewed by Simon Fraser.

        We should not apply the scroll offset when using delegate scrolling.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToContents):
        (WebCore::ScrollView::contentsToRootView):
        (WebCore::ScrollView::rootViewToTotalContents):

2014-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename PageInjectedScript* to WebInjectedScript*
        https://bugs.webkit.org/show_bug.cgi?id=128660

        Reviewed by Timothy Hatcher.

        Rename the files update build systems and users.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::host):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageConsoleAgent.h:
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        (WebCore::WebConsoleAgent::frameWindowDiscarded):
        (WebCore::WebConsoleAgent::addInspectedHeapObject):
        * inspector/WebConsoleAgent.h:
        * inspector/WebInjectedScriptHost.cpp: Renamed from Source/WebCore/inspector/PageInjectedScriptHost.cpp.
        (WebCore::WebInjectedScriptHost::type):
        (WebCore::WebInjectedScriptHost::isHTMLAllCollection):
        * inspector/WebInjectedScriptHost.h: Renamed from Source/WebCore/inspector/PageInjectedScriptHost.h.
        * inspector/WebInjectedScriptManager.cpp: Renamed from Source/WebCore/inspector/PageInjectedScriptManager.cpp.
        (WebCore::WebInjectedScriptManager::WebInjectedScriptManager):
        (WebCore::WebInjectedScriptManager::disconnect):
        (WebCore::WebInjectedScriptManager::didCreateInjectedScript):
        (WebCore::WebInjectedScriptManager::discardInjectedScriptsFor):
        * inspector/WebInjectedScriptManager.h: Renamed from Source/WebCore/inspector/PageInjectedScriptManager.h.
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerInspectorController.h:

2014-02-12  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed iOS Build fix after r163975.

        * page/EventHandler.cpp: Use wheel event stubs if !PLATFORM(MAC) || PLATFORM(IOS).

2014-02-12  Gavin Barraclough  <barraclough@apple.com>

        Clean up PageThrottler interface
        https://bugs.webkit.org/show_bug.cgi?id=128677

        Reviewed by Benjamin Poulain.

        Currently, responsibility for throttling DOM timers & suspending animations is split
        between the Page & the PageThrottler. Clarify by making Page responsible for suspending
        animations (PageThrottler is now purely related to aspects of timer throttling), and
        move all timer throttling policy to the PageThrottler, with a single function on Page to
        enable (Page::setTimerThrottlingEnabled).

        Also, transmit the full ViewState to the PageThrottler (not just the IsVisuallyIdle flag),
        and distinguish between media & page-load activity.

        * WebCore.exp.in:
            - removed setDOMTimerAlignmentInterval.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
            - createActivityToken -> mediaActivityToken
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::started):
            - createActivityToken -> pageLoadActivityToken
        * page/Page.cpp:
        (WebCore::Page::Page):
            - added m_timerThrottlingEnabled, made PageThrottler a member
        (WebCore::Page::setIsVisuallyIdleInternal):
            - update animiation suspension.
        (WebCore::Page::setTimerThrottlingEnabled):
            - setTimerAlignmentInterval -> setTimerThrottlingEnabled
        (WebCore::Page::setViewState):
            - pass viewState to PageThrottler.
        (WebCore::Page::setIsVisibleInternal):
            - don't update timer throttling.
        * page/Page.h:
        (WebCore::Page::pageThrottler):
            - made PageThrottler a member.
        (WebCore::Page::timerAlignmentInterval):
            - inlined.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - initialize ViewState.
        (WebCore::PageThrottler::~PageThrottler):
            - clean up by calling setTimerThrottlingEnabled directly.
        (WebCore::PageThrottler::hiddenPageDOMTimerThrottlingStateChanged):
            - moved from Page.
        (WebCore::PageThrottler::mediaActivityToken):
        (WebCore::PageThrottler::pageLoadActivityToken):
            - from Page::createActivityToken
        (WebCore::PageThrottler::throttlePage):
        (WebCore::PageThrottler::unthrottlePage):
            - don't throttle animations here.
        (WebCore::PageThrottler::setViewState):
        (WebCore::PageThrottler::setIsVisible):
            - added, throttle Dom timers.
        * page/PageThrottler.h:
        * page/Settings.cpp:
        (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled):
            - removed setDOMTimerAlignmentInterval, hiddenPageDOMTimerThrottlingStateChanged moved to PageThrottler.
        * page/Settings.h:
            - removed setDOMTimerAlignmentInterval.

2014-02-12  Benjamin Poulain  <bpoulain@apple.com>

        [WK2][iOS] Add back the special viewport for the old xhtml mobile doctype
        https://bugs.webkit.org/show_bug.cgi?id=128639

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        Document::setDocType() has been removed and the doctype update code with it.
        Add a call to didReceiveDocType() to ensure the viewport is updated when the doctype is parsed.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::didReceiveDocType):
        * page/ChromeClient.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::xhtmlMobileParameters):
        * page/ViewportConfiguration.h:

2014-02-12  Alexey Proskuryakov  <ap@apple.com>

        Mountain Lion build fix.

        * WebCore.exp.in: Only export WebCrypto symbols on 10.9+, because SUBTLE_CRYPTO
        is not enabled on 10.8.

2014-02-12  Alexey Proskuryakov  <ap@apple.com>

        Wrap WebCrypto keys in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128680

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/rsa-indexeddb.html

        Added Mac code to wrap a key with AES-GCM. We then serialize it into a plist,
        because more custom formats would be crazy (even the custom format in SerializedScriptValue
        makes me nervous, we'll certainly need to change CryptoKey in the future).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CommonCryptoUtilities.h:
        * crypto/SerializedCryptoKeyWrap.h: Added.
        * crypto/mac/SerializedCryptoKeyWrapMac.mm: Added.
        (WebCore::vectorFromNSData):
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):

2014-02-12  Brent Fulgham  <bfulgham@apple.com>

        Wheel events don't latch to inner scrollable elements 
        https://bugs.webkit.org/show_bug.cgi?id=128225
        <rdar://problem/12183688>

        Reviewed by Simon Fraser

        * WebCore.exp.in: Add declarations for new scrolledToTop, scrolledToBottom, scrolledToLeft, and scrolledToRight.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::findScrollableContainer): New helper function to locate first node
        in enclosing region of document that is capable of handling mouse wheel events.
        (WebCore::isAtMaxDominantScrollPosition): Predicate to check if the scrollable
        area is at the limit we will hit based on scroll direction.
        (WebCore::EventHandler::handleWheelEvent): Identify the case where we have hit
        the end of a scroll, and treat that as a valid 'handled' case. If the scroll event
        is just starting, treat end-of-scroll as unhandled so the parent element can
        handle things.
        * page/EventHandler.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Use new methods
        on the PlatformWheelEvent class.
        (WebCore::ScrollingTree::setOrClearLatchedNode): Ditto
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::shouldConsiderLatching): Moved implementation from ScrollingTree.
        (WebCore::PlatformWheelEvent::shouldClearLatchedNode): Ditto
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrolledToTop): Added
        (WebCore::ScrollableArea::scrolledToBottom):Added
        (WebCore::ScrollableArea::scrolledToLeft): Added
        (WebCore::ScrollableArea::scrolledToRight): Added
        * platform/ScrollableArea.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrolledToTop): Added
        (WebCore::RenderListBox::scrolledToBottom): Added
        (WebCore::RenderListBox::scrolledToLeft): Added
        (WebCore::RenderListBox::scrolledToRight): Added
        * rendering/RenderListBox.h: Changed to public inheritance of ScrollableArea to
        allow generic use of this type in scroll wheel logic.

2014-02-12  Brendan Long  <b.long@cablelabs.com>

        Implement DataCue for metadata cues
        https://bugs.webkit.org/show_bug.cgi?id=128402

        Reviewed by Eric Carlson.

        Test: media/track/track-datacue.html

        * CMakeLists.txt: Add DataCue.
        * DerivedSources.cpp: Add JSDataCue.
        * DerivedSources.make: Same.
        * GNUmakefile.list.am: Add DataCue and JSDataCue.
        * WebCore.vcxproj/WebCore.vcxproj: Add DataCue.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Add DataCue and JSDataCue.
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJS): Add DataCue wrapper.
        * html/track/DataCue.cpp: Copied from Source/WebCore/html/track/TextTrack.idl.
        * html/track/DataCue.h: Copied from Source/WebCore/html/track/TextTrack.idl.
        * html/track/DataCue.idl: Copied from Source/WebCore/html/track/TextTrack.idl.
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): Pass ASSERT_NO_EXCEPTION to addCue().
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Same.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue): Throw an exception if DataCue is added to a track that isn't kind="metadata".
        * html/track/TextTrack.h: Add exception code parameter to addCue().
        * html/track/TextTrack.idl: Add [RaisesException] to addCue().
        * html/track/TextTrackCue.h: Add Data CueType.

2014-02-12  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Clean up LayoutPoint class.
        https://bugs.webkit.org/show_bug.cgi?id=128515

        Reviewed by Simon Fraser.

        Remove redundant functions (keep the more explicit ones).

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        * platform/graphics/LayoutPoint.h:
        (WebCore::toLayoutPoint):
        (WebCore::toLayoutSize):
        (WebCore::roundedIntPoint):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsRects):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):

2014-02-12  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Move CoordinatedGraphicsScene, CoordinatedLayerTreeHostProxy to std::function
        https://bugs.webkit.org/show_bug.cgi?id=128473

        Reviewed by Anders Carlsson.


        Move the CoordinatedGraphicsScene class to using std::function instead of WTF::Functional and std::bind
        instead of WTF::bind. The function wrapper is now moved through function calls and not passed by reference,
        and lambda functions are inlined into the dispatchOnMainThread() calls, with the CoordinatedGraphicsScene
        refcount-protected.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::dispatchOnMainThread):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::syncRemoteContent):
        (WebCore::CoordinatedGraphicsScene::purgeGLResources):
        (WebCore::CoordinatedGraphicsScene::commitScrollOffset):
        (WebCore::CoordinatedGraphicsScene::appendUpdate):
        (WebCore::CoordinatedGraphicsScene::setActive):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2014-02-12  Eric Carlson  <eric.carlson@apple.com>

        Cleanup the code added for https://bugs.webkit.org/show_bug.cgi?id=128125.

        Not reviewed.

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): Don't need a "break" after a "return" in a case statement.
        * platform/audio/MediaSession.cpp:
        (WebCore::stateName): Ditto.
        * platform/audio/ios/MediaSessionManagerIOS.mm:

2014-02-12  Andreas Kling  <akling@apple.com>

        RenderNamedFlowThread should only support RenderElement children.
        <https://webkit.org/b/128675>

        Tighten up flow-thread rendering so that it only supports element
        children directly. This means we don't have to worry about text
        renderers on this code path.

        Reviewed by Antti Koivisto.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertedIntoTree):
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForElement):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::insertedIntoTree):
        (WebCore::RenderObject::willBeRemovedFromTree):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::createRendererIfNeeded):

2014-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Modernize missed inspector files
        https://bugs.webkit.org/show_bug.cgi?id=128661

        Reviewed by Anders Carlsson.

        Add final, override, and use nullptr where appropriate.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asCSSStyleRule):
        (WebCore::InspectorCSSAgent::discardAgent):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorFrontendClientLocal.h:

2014-02-11  Brent Fulgham  <bfulgham@apple.com>

        Remove some unintended copies in ranged for loops
        https://bugs.webkit.org/show_bug.cgi?id=128644

        Reviewed by Anders Carlsson.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments): Avoid creating/destroying
        RefPtrs in loop.

2014-02-12  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Update the HTML Media Capture implementation.
        https://bugs.webkit.org/show_bug.cgi?id=118465

        Reviewed by Darin Adler.

        Make the implementation in WebKit compatible with the 2013-05-09
        version of the spec, which makes the "capture" attribute a boolean
        instead of an enum.

        Covered by fast/forms/file/file-input-capture.html.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::capture): Renamed to shouldUseMediaCapture().
        (WebCore::HTMLInputElement::shouldUseMediaCapture): Return a bool.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Turn the `capture' attribute into a
        reflective boolean instead of a DOMString.
        * platform/FileChooser.h:

2014-02-12  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Remove unused method in RenderFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=128373

        Reviewed by Mihnea Ovidenie.

        After the landing of https://bugs.webkit.org/show_bug.cgi?id=118665, the 
        RenderFlowThread::computeRegionClippingRect method is obsolete.

        No new tests needed, this patch only removes an unused method.

        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFlowThread.h:

2014-02-12  Mihai Tica  <mitica@adobe.com>

        [CSS Element Blending] Implement the software path of -webkit-blend-mode with Core Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=99119

        Reviewed by Simon Fraser.

        This patch adds support for -webkit-blend-mode with Core Graphics.
        The layer promotion code that forced compositing when blending was detected has been removed.
        Remaining work for the software path is to detect and implement isolation of the blending operation:
        as stated in the spec, blending should be limited to the parent stacking context.

        Tests: css3/compositing/blend-mode-blended-element-overlapping-composited-sibling-should-have-compositing-layer.html
               css3/compositing/blend-mode-parent-of-composited-blended-has-layer.html
               css3/compositing/blend-mode-simple-composited.html
               css3/compositing/blend-mode-with-composited-descendant-should-have-layer.html

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer): Remove CompositingReasonBlending.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers): Set the blendMode on the GraphicsContext.
        * rendering/RenderLayer.h: paintsWithTransparency should return true when a blendMode is set.
        * rendering/RenderLayerCompositor.cpp: Remove promotion code when a blendMode is detected.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Remove CompositingReasonBlending reason.
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Remove CompositingReasonBlending reason.
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Remove CompositingReasonBlending reason.
        (WebCore::RenderLayerCompositor::logReasonsForCompositing): Remove CompositingReasonBlending reason.
        * rendering/RenderLayerCompositor.h:
        - Remove the requiresCompositingForBlending method
        - Remove the CompositingReasonBlending from the CompositingReasons enum.

2014-02-11  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Switch repaint rect from IntRect to LayoutRect to be able to
        repaint on device pixel boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=128477

        Reviewed by Simon Fraser.

        RenderLayer needs to be able to repaint on device pixel boundaries. RenderView still
        repaints on integral position.

        No change in functionality.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::clearRepaintRects):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        * rendering/RenderObject.h:

2014-02-11  Dan Bernstein  <mitz@apple.com>

        iOS build fix fix.

        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):

2014-02-11  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):

2014-02-11  David Kilzer  <ddkilzer@apple.com>

        ContentData equals() methods are not inline-able
        <http://webkit.org/b/128538>

        Reviewed by Darin Adler.

        Get rid of pure virtual equals() method in favor of
        ContentData::Type enum for runtime type information.
        This also lets us devirtualize the isFoo() methods.

        * rendering/style/ContentData.h:
        (WebCore::ContentData::type): Add.
        (WebCore::ContentData::isCounter): Devirtualize.
        (WebCore::ContentData::isImage): Devirtualize.
        (WebCore::ContentData::isQuote): Devirtualize.
        (WebCore::ContentData::isText): Devirtualize.
        (WebCore::ContentData::ContentData): Add.  Include
        ContentData::Type parameter.
        (WebCore::operator==): Add overloaded methods for each subclass.
        Stop using pure virtual equals() method, check type(), and use
        overloaded subclass operator==() methods.
        (WebCore::operator!=): Add overloaded methods for each subclass.

2014-02-11  Andreas Kling  <akling@apple.com>

        Protect some RenderFlowThread functions.
        <https://webkit.org/b/128642>

        Make the RenderFlowThread constructor protected and a handful of
        member functions private.

        Reviewed by Anders Carlsson.

        * rendering/RenderFlowThread.h:

2014-02-11  Andreas Kling  <akling@apple.com>

        Don't allocate RenderNamedFlowThread's child list separately.
        <https://webkit.org/b/128640>

        Since we always create the flow-thread child list, there's no reason
        to put it in a separate heap allocation. Also remove the typedef and
        use auto instead.

        Reviewed by Anders Carlsson.

        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        * rendering/RenderNamedFlowThread.h:

2014-02-11  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayerClient::paintContents's clip rect subpixel based.
        https://bugs.webkit.org/show_bug.cgi?id=128460

        Reviewed by Simon Fraser.

        GraphicsClient::paintContents takes clipRect as FloatRect now so that we can paint on
        subpixel position.

        No change in functionality.

        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::paintContents):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::verticalScrollbarStart):
        (WebCore::RenderLayer::horizontalScrollbarStart):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2014-02-11  Antti Koivisto  <antti@apple.com>

        GIF animations should be suspended when outside of viewport
        https://bugs.webkit.org/show_bug.cgi?id=128632

        Reviewed by Andreas Kling.
        
        Animations are driven by the paint cycle. Speculative tiles keep animations outside the actual viewport going.
        
        Pause animations when they are outside the viewport by not painting them.

        Test: fast/repaint/no-animation-outside-viewport.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::animationAdvanced):
        
            Call animation specific newImageAnimationFrameAvailable instead of the generic notifyObservers.

        * loader/cache/CachedImage.h:
        
            Removed now unnecessary resumeAnimatingImagesForLoader mechanism.
            Remove unnecessary shouldPauseAnimation. Pausing is now always done when by avoiding repaint.

        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::newImageAnimationFrameAvailable):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        
            Check if we have image animations to resume when scroll position changes.

        * page/Page.cpp:
        (WebCore::Page::resumeAnimatingImages):
        
            Use the same mechanism when resuming background tabs etc.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalAdvanceAnimation):
        
            Remove the shouldPauseAnimation test, always rely on pausing on invalidation.

        * platform/graphics/ImageObserver.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::~RenderElement):
        (WebCore::shouldRepaintForImageAnimation):
        
            Factor the pausing conditions to a function. Test that the animation is withing the
            visible rect.

        (WebCore::RenderElement::newImageAnimationFrameAvailable):
        
            Add renderer to the paused animation set if we don't continue the animation.

        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):
        
            Resume the paused animations by triggering repaint.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::setHasPausedImageAnimations):
        (WebCore::RenderElement::hasPausedImageAnimations):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::addRendererWithPausedImageAnimations):
        (WebCore::RenderView::removeRendererWithPausedImageAnimations):
        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):
        * rendering/RenderView.h:

2014-02-11  Andreas Kling  <akling@apple.com>

        Remove unused RenderNamedFlowThread::previousRendererForNode().
        <https://webkit.org/b/128637>

        Reviewed by Antti Koivisto.

        * rendering/RenderNamedFlowThread.cpp:
        * rendering/RenderNamedFlowThread.h:

2014-02-11  Andreas Kling  <akling@apple.com>

        Move renderNamedFlowThreadWrapper() to RenderElement.
        <https://webkit.org/b/128634>

        This function is only ever called on RenderElements so move it there
        from RenderObject.

        Reviewed by Antti Koivisto.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::renderNamedFlowThreadWrapper):
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2014-02-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Position and thickness of underline as text size changes
        https://bugs.webkit.org/show_bug.cgi?id=16768

        Reviewed by Dean Jackson.

        This patch adopts the iOS codepath for underlines. It also reorganizes
        drawLineForText to avoid a costly global state save & restore.

        Test: fast/css3-text/css3-text-decoration/text-decoration-thickness.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText):
        (WebCore::GraphicsContext::computeLineBoundsForText):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLinesForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2014-02-11  Ryosuke Niwa  <rniwa@webkit.org>

        Frame::rectForSelection shouldn't instantiate FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=128587

        Reviewed by Enrica Casucci.

        Made VisiblePosition::absoluteCaretBounds more interoperable with the one in FrameSelection and made
        iOS's Frame::rectForScrollToVisible use that function instead.

        The above change allows us to remove:
        - suppressCloseTyping(), restoreCloseTyping(), and m_closeTypingSuppressions in FrameSelection
        - suppressSelectionNotifications() and restoreSelectionNotifications() in EditorClient

        See inline comments below for more details.

        * Source/WebCore/WebCore.exp.in:

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::CaretBase::updateCaretRect):
        (WebCore::FrameSelection::caretRendererWithoutUpdatingLayout):
        (WebCore::DragCaretController::caretRenderer):
        (WebCore::repaintCaretForLocalRect):
        (WebCore::FrameSelection::recomputeCaretRect): Merged FrameSelection::localCaretRect(). Modified
        the code to update caretNode when and only when caret rect is updated. Also added an assertion to
        ensure absoluteCaretBounds() on FrameSelection and VisiblePosition yield the same result.

        (WebCore::CaretBase::paintCaret):
        * editing/FrameSelection.h:

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteCaretBounds): Fixed the bug where the old code wasn't respecting
        the convention to use containing block as the renderer to paint caret.

        * editing/htmlediting.cpp:
        (WebCore::caretRendersInsideNode): Moved from FrameSelection.cpp.
        (WebCore::rendererForCaretPainting): Ditto and renamed from caretRenderer.
        (WebCore::localCaretRectInRendererForCaretPainting): Extracted from FrameSelection::updateCaretRect.
        (WebCore::absoluteBoundsForLocalCaretRect): Ditto from CaretBase::absoluteBoundsForLocalRect.
        * editing/htmlediting.h:

        * loader/EmptyClients.h:
        * page/EditorClient.h:
        * page/Frame.h:

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::rectForScrollToVisible): Reimplemented in its simplest form using VisiblePosition's
        absoluteCaretBounds().

2014-02-11  Enrica Casucci  <enrica@apple.com>

        Support WebSelections in WK2 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127015
        <rdar://problem/15211964>

        Reviewed by Benjamin Poulain.

        Adding few exports.

        * WebCore.exp.in:

2014-02-11  Andreas Kling  <akling@apple.com>

        CTTE: RenderNamedFlowThread always has a WebKitNamedFlow.
        <https://webkit.org/b/128623>

        Codify the fact that RenderNamedFlowThread always has a corresponding
        WebKitNamedFlow by storing it in a Ref, and adding an accessor that
        returns a reference to get rid of all the ->'s.

        Also removed some unnecessary assertions exposed by this.

        Reviewed by Antti Koivisto.

        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::ensureFlowWithName):
        * dom/NamedFlowCollection.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::flowThreadName):
        (WebCore::RenderNamedFlowThread::dispatchRegionLayoutUpdateEvent):
        (WebCore::RenderNamedFlowThread::dispatchRegionOversetChangeEvent):
        (WebCore::RenderNamedFlowThread::regionLayoutUpdateEventTimerFired):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        (WebCore::RenderNamedFlowThread::setMarkForDestruction):
        (WebCore::RenderNamedFlowThread::resetMarkForDestruction):
        (WebCore::RenderNamedFlowThread::isMarkedForDestruction):
        * rendering/RenderNamedFlowThread.h:

2014-02-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Convert position:fixed property to position:absolute upon copy
        https://bugs.webkit.org/show_bug.cgi?id=128194

        Reviewed by Simon Fraser.

        This adds a Setting and Preference that allows clients to opt-in to this behavior.

        This new behavior is only activated if the entire body is copied. If there is a position:fixed
        element in the copied selection, it is replaced with position:absolute, and a containing
        block (position:relative) is wrapped around the copied text.

        This patch originally converted position:-webkit-sticky to position:relative. However, we
        currently don't support copying and pasting of position:-webkit-sticky content (See below).
        Therefore, this patch only deals with position:fixed.

        Right now we don't copy position:-webkit-sticky. This is because:
        1. When copying styled elements, we parse the style properties again
        2. CSSParserContext has a flag which can disable parsing -webkit-sticky
        3. There are two constructors to CSSParserContext: one that takes a document and sets up the
        aforementioned flag, and a simple one that doesn't take a document and sets all the enableFoo
        flags to false
        4. At the relevant place within copy code, we are far removed from the Document object, so we
        instead call the second constructor, thereby disabling parsing of -webkit-sticky

        Test: editing/pasteboard/copy-paste-converts-sticky-and-fixed.html

        * WebCore.exp.in: Export the Setting setter
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::convertFixedAndStickyPosition): Converts a single style
        * editing/EditingStyle.h:
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator): Remember if we found
        an element which needs the position:relative containing block
        (WebCore::StyledMarkupAccumulator::appendElement): Surround with the position:relative
        containing block if necessary
        (WebCore::createMarkupInternal):
        * page/Settings.cpp:
        (WebCore::Settings::Settings): New setting to opt-in to this new behavior
        (WebCore::Settings::setConvertPositionStyleOnCopy):
        * page/Settings.h:
        (WebCore::Settings::convertPositionStyleOnCopy):
        * testing/InternalSettings.cpp: Allow setting the setting from a Layout Test
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setConvertPositionStyleOnCopy):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-02-11  Youenn Fablet  <youennf@gmail.com>

        XMLHttpRequest should not send DNT header
        https://bugs.webkit.org/show_bug.cgi?id=128533

        Reviewed by Alexey Proskuryakov.

        Added DNT (Do Not Track) header to the list of forbidden headers.
        Updated http/tests/xmlhttprequest/set-dangerous-headers.html to test that header.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):

2014-02-10  Jeffrey Pfau  <jpfau@apple.com>

        Bring third-party app cache blocking behavior in line with private browsing app cache blocking behavior
        https://bugs.webkit.org/show_bug.cgi?id=128557

        Reviewed by Alexey Proskuryakov.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::update):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadMainResource):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainError):
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::isApplicationCacheBlockedForRequest):
        * loader/appcache/ApplicationCacheHost.h:

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

        IDB: The test after storage/indexeddb/mozilla/object-identity.html fails in cleanup code
        <rdar://problem/16040663> and https://bugs.webkit.org/show_bug.cgi?id=128621

        Reviewed by Alexey Proskuryakov.

        Covered by storage/indexeddb/mozilla/object-identity.html.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::abort): Clear the m_database pointer before calling the onAbort callback.
        (WebCore::IDBTransactionBackend::commit): Don't run the abort code if there's no m_database pointer.

2014-02-10  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Move the implementation of CDMPrivateAVFoundation back into MediaPlayerPrivateAVFoundationObjC.
        https://bugs.webkit.org/show_bug.cgi?id=128559

        Reviewed by Dean Jackson.

        To prepare for multiple simultaneous CDMs with muliple MediaPlayer types, move the implementation for
        CDMPrivateAVFoundation back into its media engine.

        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
        (WebCore::MediaKeyExceptionToErrorCode): Added.
        (WebCore::CDMSessionAVFoundation::generateKeyRequest): Moved to MediaPlayerPrivateAVFoundationObjC.
        (WebCore::CDMSessionAVFoundation::releaseKeys): Ditto.
        (WebCore::CDMSessionAVFoundation::update): Ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::generateKeyRequest): Added, pass through to MediaPlayerPrivate.
        (WebCore::MediaPlayer::releaseKeys): Ditto.
        (WebCore::MediaPlayer::update): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::generateKeyRequest): Added.
        (WebCore::MediaPlayerPrivateInterface::releaseKeys): Ditto.
        (WebCore::MediaPlayerPrivateInterface::update): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::generateKeyRequest): Moved from CDMSessionAVFoundation.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::releaseKeys): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::update): Ditto.

2014-01-24  Jer Noble  <jer.noble@apple.com>

        Run UserAgentScripts through jsmin rather than the css preprocessor
        https://bugs.webkit.org/show_bug.cgi?id=127559

        Reviewed by Tim Horton.

        User Agent JavaScript files were being run through the c++ preprocessor to strip out
        comments (and presumably to allow #if ENABLE macros, though that feature is entirely
        unused). This had the side effect of removing important whitespace, namely newlines where
        there would normally be an implicit semicolon.

        Instead, .js files will now be run through the jsmin minifier, used by the inspector.
        Jsmin will also strip comments and whitespace, but in a syntactically aware way which will
        keep newlines when their presence adds an implied semicolon.

        * DerivedSources.make:
        * Scripts/make-js-file-arrays.py: Added.
        (stringifyCodepoint):
        (chunk):
        (main):

2014-02-11  Andy Estes  <aestes@apple.com>

        [Mac] connection:willStopBufferingData: no longer exists in NSURLConnectionDelegate
        https://bugs.webkit.org/show_bug.cgi?id=128583

        Reviewed by Anders Carlsson.

        The delegate method was removed in Snow Leopard.

        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:

2014-02-10  Andy Estes  <aestes@apple.com>

        [Content Filter] Check for NULL before calling dispatch_release()
        https://bugs.webkit.org/show_bug.cgi?id=128576

        Reviewed by Darin Adler.

        m_neFilterSourceQueue will be NULL if NEFilterSource isn't enabled, and
        passing NULL to dispatch_release() is undefined.

        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::~ContentFilter):

2014-01-24  Jer Noble  <jer.noble@apple.com>

        [MediaControls] Allow the media controls script to be debuggable by giving it a generated sourceURL
        https://bugs.webkit.org/show_bug.cgi?id=127560

        Reviewed by Eric Carlson.

        When evaluating a script through ScriptController, if that script does not have an
        explicit sourceURL, it will not appear in the resources section of the Web Inspector.
        For debug builds only, give the media controls script a generated (i.e. fake) sourceURL.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-02-11  Samuel White  <samuel_white@apple.com>

        AX: Add text replacement activity support to NSAccessibilitySelectTextWithCriteriaParameterizedAttribute.
        https://bugs.webkit.org/show_bug.cgi?id=128397

        Reviewed by Chris Fleizach.

        Added text replacement support for the AXSelectTextWithCriteria parameterized attribute.

        No new test. Updated platform/mac/accessibility/select-text.html to test the added functionality.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectText):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySelectTextCriteria::AccessibilitySelectTextCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):

2014-02-11  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed. Speculative test fix.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::pixelSnappingFactor):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-11  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * platform/ios/TileGrid.mm:
        (WebCore::TileGrid::dropTilesBetweenRects):
        (WebCore::TileGrid::dropDistantTiles):
        (WebCore::TileGrid::dropInvalidTiles):

2014-02-11  James Craig  <jcraig@apple.com>

        Web Inspector: AX: Accessibility Node Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127447

        Reviewed by Timothy Hatcher.

        New methods supporting WebCore::AccessibilityObject::computedRoleString()
        used for Accessibility section in WebInspector Node Inspector. Other updates 
        support the JSON interface for the WebInspectorUI feature.

        Test: accessibility/roles-computedRoleString.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::ariaRoleMap):
        (WebCore::reverseAriaRoleMap):
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole):
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper computedRoleString]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getAccessibilityPropertiesForNode):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/InspectorDOMAgent.h:
        * inspector/protocol/DOM.json:

2014-02-10  Oliver Hunt  <oliver@apple.com>

        Stop throwing when attempting to read instance properties directly from the prototype
        https://bugs.webkit.org/show_bug.cgi?id=128568

        Reviewed by Mark Lam.

        A number of websites expect to be able to access instance properties
        directly through the prototype.  This is broken behavior but if we
        throw an exception the entire site breaks.  This patch simply makes us
        return undefined when reading, and logs the error to the console.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjConstructorTestSubObj):
        (WebCore::jsTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjConditionalAttr4Constructor):
        (WebCore::jsTestObjConditionalAttr5Constructor):
        (WebCore::jsTestObjConditionalAttr6Constructor):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):

2014-02-11  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support calc() breadth size type
        https://bugs.webkit.org/show_bug.cgi?id=103761

        Reviewed by Dean Jackson.

        We now support using calc() in
        -webkit-grid-template-{columns|rows}. This means that we now
        match the specification and support all the possible ways to
        specify the track breadths.

        This includes a fix to CSSCalculationValue that was converting
        Length values to CalcExpressionNumber and thus removing all the
        info regarding length units (px, em, pt...). That's why things
        like calc(10px + 20%) were shown as calc(10 + 20%) in
        getComputedStyle() output.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::specifiedValueForGridTrackBreadth):
        (WebCore::specifiedValueForGridTrackSize):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackBreadth):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):

2014-02-11  Brent Fulgham  <bfulgham@apple.com>

        Correct some uses of 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=128578

        Reviewed by Anders Carlsson.

        Correct the following instances of "for (auto ...)" to use reference or
        const references to avoid copies.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementsFromAttribute):
        * css/CSSGridTemplateValue.cpp:
        (WebCore::stringForPosition):
        * dom/Node.cpp:
        (WebCore::NodeListsNodeData::invalidateCaches):
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::discardInjectedScriptsFor):
        * page/WheelEventDeltaTracker.cpp:
        (WebCore::WheelEventDeltaTracker::dominantScrollGestureDirection):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        * platform/ios/TileGrid.mm:
        (WebCore::TileGrid::dropTilesBetweenRects):
        (WebCore::TileGrid::dropDistantTiles):
        (WebCore::TileGrid::dropInvalidTiles):
        * rendering/InlineTextBox.cpp:
        (WebCore::translateIntersectionPointsToSkipInkBoundaries):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::restoreTo):

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

        [New Multicolumn] Make columns work with line grids
        https://bugs.webkit.org/show_bug.cgi?id=128555

        Reviewed by Antti Koivisto.

        Added line-snap-into-columns.html and line-snap-inside-columns.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::pageOffset):
        (WebCore::LayoutState::setLineGridPaginationOrigin):
        Change the LayoutState to call into the renderer to compute the line
        grid pagination origin instead of doing it directly. Added the
        appropriate getters and setters to enable the renderer to do this.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeLineGridPaginationOrigin):
         * rendering/RenderBlock.h:
        An implementation for the old multi-column code. The logic is the
        same with tweaks made now that the method is on the renderer instead.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset):
        Fix a bug with flow threads and pageLogicalTopForOffset. Normal CSS region-based
        flow threads are never embedded in an enclosing pagination context, so they
        didn't add in the firstPageLogicalTop (or subtract it when computing the region
        hit). Multi-column flow threads do need to subtract out the firstPageLogicalTop,
        since it can occur somewhere on the page.
        
        Ultimately regions will need to get smarter here too if they want to work with
        line grids, but for now I just fixed multi-column.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isUnsplittableForPagination):
        Undo this change, since it prevents the inheritance of line grids into the
        multi-column layout.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::computeLineGridPaginationOrigin):
        * rendering/RenderMultiColumnFlowThread.h:
        An implementation for the new multi-column code. The logic is the
        same as the old code. Code duplication is ok, since the old multi-column method
        in RenderBlock will just be deleted once the new code is turned on, and it's easier
        not to intertwine them.

2014-02-11  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Overflow above the first region is not properly painted for regions with padding
        https://bugs.webkit.org/show_bug.cgi?id=128590

        Reviewed by Andrei Bucur.

        Painting is done using the layer of the region's container, so offsetting using the content box
        of the region itself is incorrect. 

        Test: fast/regions/region-padding-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::regionContainer):
        (WebCore::RenderRegion::regionContainerLayer):
        * rendering/RenderRegion.h:

2014-02-11  Benjamin Poulain  <benjamin@webkit.org>

        querySelector() does not use the compiler correctly
        https://bugs.webkit.org/show_bug.cgi?id=128588

        Reviewed by Andreas Kling.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::execute):
        I messed up the refactoring when I landed SelectorQuery. The compiled
        code was not used the first time through SelectorDataList::execute.

2014-02-11  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] High playback rate causes crash
        https://bugs.webkit.org/show_bug.cgi?id=128453

        Reviewed by Philippe Normand.

        To high playback rate passed to GStreamer was causing crash.
        Added guard in setRate method.

        Test: media/video-extreme-playbackrate-crash.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setRate):

2014-02-10  Brady Eidson  <beidson@apple.com>

        IndexedDB assertion at IDBTransactionBackend::~IDBTransactionBackend()
        https://bugs.webkit.org/show_bug.cgi?id=128341

        Reviewed by Maciej Stachowiak.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::~IDBTransactionBackend): "Finished" is not the only
          valid value here - In WK2, "Unused" is also valid. Update the ASSERT.

2014-02-10  Alexey Proskuryakov  <ap@apple.com>

        Add hooks for wrapping CryptoKeys in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128567

        Reviewed by Anders Carlsson.

        * bindings/js/SerializedScriptValue.cpp: Changed SerializedScriptValue to serialize
        wrapped keys. Added a version number to crypto key serialization.

        * dom/Document.cpp:
        (WebCore::Document::wrapCryptoKey):
        (WebCore::Document::unwrapCryptoKey):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::wrapCryptoKey):
        (WebCore::ChromeClient::unwrapCryptoKey):
        Hand wrapping/unwrapping over to client code.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):
        * workers/WorkerGlobalScope.h:
        Not implemented in workers. SubtleCrypto is currently not exposed in workers. It used
        to be possible in WebKit implementation to post a CryptoKey to a worker anyway,
        but this doesn't work any more.

2014-02-10  ChangSeok Oh  <changseok.oh@collabora.com>

        Support ANGLE_instanced_arrays for linux
        https://bugs.webkit.org/show_bug.cgi?id=127465

        Reviewed by Martin Robinson.

        Support the instanced drawing WebGL extension, ANGLE_instanced_arrays for linux platform.
        This is a following patch for r162565. Relevant opengl APIs are exposed
        for WebGLRenderingContext to access them.

        Covered by fast/canvas/webgl/angle-instanced-arrays.html

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::supported):
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):

2014-02-10  Mark Lam  <mark.lam@apple.com>

        Removing limitation on JSLock’s lockDropDepth.
        <https://webkit.org/b/128570>

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        * platform/ios/wak/WebCoreThread.mm:
        (SendDelegateMessage):
        (WebThreadRunOnMainThread):
        - No longer need to specify AlwaysDropLocks, because DropAllLocks is
          now always unconditional.

2014-02-10  Benjamin Poulain  <benjamin@webkit.org>

        Clean up MarkupAccumulator::appendCharactersReplacingEntities
        https://bugs.webkit.org/show_bug.cgi?id=128440

        Reviewed by Ryosuke Niwa.

        Some cleanup:
        -Remove the copied code for the loops. Instead, use a template with the loop
         parametrized by the characters type.
        -Move EntityDescription from the header to the implementation.
        -Make the 5 substitution strings compile-time literals. Replacement is not hot enough
         to justify the static here.

        * editing/MarkupAccumulator.cpp:
        (WebCore::appendCharactersReplacingEntitiesInternal):
        (WebCore::MarkupAccumulator::appendCharactersReplacingEntities):
        * editing/MarkupAccumulator.h:

2014-02-10  Benjamin Poulain  <benjamin@webkit.org>

        Add a few pseudo type to the selector compiler through function calls
        https://bugs.webkit.org/show_bug.cgi?id=128514

        Reviewed by Dean Jackson.

        Certain pseudo type checkers rely on virtual function calls. Since those types
        are uncommon, and this code generator cannot currently make virtual function calls,
        the checker are added by generating a function call to a wrapper function.

        To avoid code duplication between SelectorChecker and the compiler, all the relevant checking
        code has been moved to a common header, SelectorCheckerTestFunctions.h.
        SelectorChecker still inline the functions, while the SelectorCompiler generate local static functions
        and generate calls to them as needed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h: Added.
        (WebCore::isAutofilled):
        (WebCore::isDefaultButtonForForm):
        (WebCore::isDisabled):
        (WebCore::isEnabled):
        (WebCore::isChecked):
        (WebCore::isInvalid):
        (WebCore::isOptionalFormControl):
        (WebCore::isRequiredFormControl):
        (WebCore::isValid):
        (WebCore::matchesReadOnlyPseudoClass):
        (WebCore::matchesReadWritePseudoClass):
        (WebCore::shouldAppearIndeterminate):
        (WebCore::matchesFullScreenPseudoClass):
        (WebCore::matchesFutureCuePseudoClass):
        (WebCore::matchesPastCuePseudoClass):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::nonConstTestFunctionWrapper):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest):
        * dom/Element.h:
        (WebCore::Element::isValidFormControlElement):
        * dom/Node.h:
        (WebCore::Node::toInputElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        * html/HTMLFormControlElement.h:

2014-02-10  Benjamin Poulain  <benjamin@webkit.org>

        Add the basic infrastructure to compile attributes matching in selectors
        https://bugs.webkit.org/show_bug.cgi?id=128484

        Reviewed by Gavin Barraclough.

        Tests: fast/selectors/querySelector-attribute-match-with-child-backtracking.html
               fast/selectors/querySelector-long-attribute-match-with-child-backtracking.html
               fast/selectors/querySelector-long-multiple-attribute-match-with-child-backtracking.html
               fast/selectors/querySelector-multiple-attribute-match-with-child-backtracking.html

        Add the infrastructure to match attributes. This only add basic support for the 'Set' match
        type, the other match types will have to be built on top.

        * cssjit/RegisterAllocator.h:
        (WebCore::RegisterAllocator::availableRegisterCount):
        (WebCore::RegisterAllocator::allocateRegister):
        (WebCore::RegisterAllocator::deallocateRegister):
        (WebCore::RegisterAllocator::reserveCalleeSavedRegisters):
        (WebCore::RegisterAllocator::restoreCalleeSavedRegisters):
        (WebCore::RegisterAllocator::allocatedRegisters):
        (WebCore::RegisterAllocator::RegisterAllocator):
        (WebCore::RegisterAllocator::~RegisterAllocator):
        In the worst case, matching attributes can take up to 10 registers. On x86_64, we have
        8 caller-saved registers. The extra 2 registers are simply added by taking callee-saved registers.

        RegisterAllocator is modified to know support saving and restoring callee saved registers.
        The list of available registers is changed from a vector to a HashSet because the registers
        are removed from arbitrary locations in restoreCalleeSavedRegisters(). The m_allocatedRegisters
        remain a vector since the allocation/release pattern remain ordered.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):

        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        This new utility finds the minimum number of registers needed to compile the input. In most
        cases we have plenty enough. In rare cases we need to saved a few registers to the stack.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::testIsHTMLFlagOnNode):
        (WebCore::SelectorCompiler::canMatchStyleAttribute):

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSynchronizeStyleAttribute):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSynchronizeAllAnimatedSVGAttribute):
        The style attribute and certain SVG attributes can be modified lazily. In those cases,
        the element needs to be updated before querying the attributes.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributesMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        Generate the attribute matching. For each CSSSelector matching an attribute, we generate
        a loop over all the attributes of the element, maching the particular CSSSelector.
        This makes no attempt at grouping related queries since those do not seem to happen a lot
        in practice.

        * dom/Attribute.h:
        (WebCore::Attribute::nameMemoryOffset):
        (WebCore::Attribute::nameMatchesFilter):
        (WebCore::Attribute::matches):
        * dom/ElementData.h:
        (WebCore::ElementData::isUniqueFlag):
        (WebCore::ElementData::arraySizeAndFlagsMemoryOffset):
        (WebCore::ElementData::styleAttributeIsDirtyFlag):
        (WebCore::ElementData::animatedSVGAttributesAreDirtyFlag):
        (WebCore::ElementData::arraySizeOffset):
        (WebCore::ShareableElementData::attributeArrayMemoryOffset):
        (WebCore::UniqueElementData::attributeVectorMemoryOffset):
        * dom/Node.h:
        (WebCore::Node::flagIsHTML):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::synchronizeStyleAttributeInternal):
        * dom/StyledElement.h:
        (WebCore::StyledElement::synchronizeStyleAttributeInternal):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute):
        * svg/SVGElement.h:

2014-02-10  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/indexes.html fails
        <rdar://problem/16031590> and https://bugs.webkit.org/show_bug.cgi?id=128563

        Reviewed by Tim Horton.

        Tested by storage/indexeddb/mozilla/indexes.html (and probably others)

        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::IDBGetResult): Add a constructor that takes an IDBKeyData argument.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): If there’s no keyPath then skip the injection step.

2014-02-10  Benjamin Poulain  <benjamin@webkit.org>

        Speed up DatasetDOMStringMap::item() when the element has multiple attributes
        https://bugs.webkit.org/show_bug.cgi?id=128058

        Reviewed by Darin Adler.

        Accessing data attributes by name through DatasetDOMStringMap involes the conversion
        from JavaScript property name to attribute name (done with propertyNameMatchesAttributeName()).

        When there is a single data attribute, that method is efficient. When there are several attributes,
        comparing names character by character becomes a bottleneck.

        This patch add an efficent path for this case: instead of converting the attribute name on the fly,
        the JavaScript property name is converted to an attribute name so that it can compared by its
        AtomicStringImpl pointer.

        This method puts a lot more pressure on convertPropertyNameToAttributeName()'s speed. The method was
        improved accordingly to compensate for its new caller.

        When enumerating multiple attributes by name, this patch provides about 80% speedup.
        I could not measure any slow down on the simple cases.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::convertPropertyNameToAttributeName):
        (WebCore::DatasetDOMStringMap::item):
        * dom/ElementData.h:
        (WebCore::AttributeIteratorAccessor::attributeCount):

2014-02-10  Ryosuke Niwa  <rniwa@webkit.org>

        Address the review comments for r163825.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition):
        (WebCore::positionForIndex):

2014-02-10  Simon Fraser  <simon.fraser@apple.com>

        Try to fix the 32-bit build.

        * WebCore.exp.in:

2014-02-10  Filip Pizlo  <fpizlo@apple.com>

        Rename Operations.h to JSCInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=128543

        Rubber stamped by Geoffrey Garen.

        No new tests because no change in behavior.

        * ForwardingHeaders/runtime/JSCInlines.h: Added.
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDictionary.h:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/WebCoreTypedArrayController.cpp:
        * bridge/c/c_utility.h:
        * bridge/jsc/BridgeJSC.h:
        * dom/CustomEvent.cpp:
        * dom/Node.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLImageLoader.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/WebConsoleAgent.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FilterEffect.cpp:
        * testing/MockCDM.cpp:
        * xml/XMLHttpRequest.cpp:

2014-02-09  Dean Jackson  <dino@apple.com>

        Update aspect-ratio property to have constraining keywords
        https://bugs.webkit.org/show_bug.cgi?id=128262

        Reviewed by Simon Fraser.

        Add support for "from-dimensions" and "from-intrinsic"
        property values to "-webkit-aspect-ratio". I also changed
        the default value from "none" to "auto", because "none" doesn't
        make sense any more.

        Covered by enhancing existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): New keywords.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAspectRatio): Support new keywords.
        * css/CSSValueKeywords.in: Add from-dimensions and from-intrinsic.
        * css/DeprecatedStyleBuilder.cpp: This now has to handle the new
        values. I also changed "none" to "auto".
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        * rendering/style/RenderStyle.h: hasAspectRatio is now aspectRatioType
        and indicates one of the three keywords, or a specified number.
        * rendering/style/RenderStyleConstants.h: New enum.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-02-10  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Add support for image document viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=128565

        Reviewed by Simon Fraser.

        Add proper default settings for displaying images.

        * WebCore.exp.in:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::imageDocumentParameters):
        (WebCore::ViewportConfiguration::textDocumentParameters):
        * page/ViewportConfiguration.h:

2014-02-10  Brendan Long  <b.long@cablelabs.com>

        Unreviewed GTK build fix after r163816.

        * GNUmakefile.list.am: Remove HTMLMediaSource.h and HTMLMediaSource.cpp

2014-02-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed EFL WebKit2 build fix after r163816.

        * CMakeLists.txt: Remove HTMLMediaSource.cpp

2014-02-10  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLTextFormControlElement::setSelectionRange shouldn't use VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=128478

        Reviewed by Darin Adler.

        Added positionForIndex to compute Position given a selection index. This function doesn't
        synchronously trigger like visiblePositionForIndex.

        Also added assertions in visiblePositionForIndex and visiblePositionForIndex to make sure
        they are inverse of one another.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Use positionForIndex. Also removed
        the now tautological assertions since we would never create a position outside the inner text
        element.

        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition): Fixed the bug where this
        function could return a selection index beyond innerTextElement in some types of input
        elements such as search fields. fast/forms/search-disabled-readonly.html hits the newly
        added assertion without this change. Note we can't use visiblePositionForIndex here as that
        would result in a mutual recursion with the assertion in visiblePositionForIndex.

        (WebCore::HTMLTextFormControlElement::visiblePositionForIndex): Added an assertion.

        (WebCore::positionForIndex): Added. It's here with prototype at the beginning of the file
        so that it's right next to HTMLTextFormControlElement::innerText() where we do a similar
        DOM traversal to obtain the inner text value.

2014-02-07  Jeffrey Pfau  <jpfau@apple.com>

        Disable access to application cache when in private browsing
        https://bugs.webkit.org/show_bug.cgi?id=128426

        Reviewed by Alexey Proskuryakov.

        Tests: http/tests/security/appcache-in-private-browsing.html
               http/tests/security/appcache-switching-private-browsing.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::update):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::isApplicationCacheEnabled):

2014-02-10  Jer Noble  <jer.noble@apple.com>

        [MSE] Fix layering violations in MediaSource
        https://bugs.webkit.org/show_bug.cgi?id=128546

        Reviewed by Eric Carlson.

        Code in Modules should be considered part of html/ and should have the
        same layering properties. Get rid of HTMLMediaSource (which was intended
        to allow Modules/mediasource to be considered part of platform/) and add
        a new client interface allowing communication from platform/ -> 
        Modules/mediasource.

        Replace HTMLMediaSource -> MediaSourcePrivateClient:
        * html/HTMLMediaSource.cpp: Removed.
        * html/HTMLMediaSource.h: Removed.
        * platform/graphics/MediaSourcePrivateClient.h: Added.
        (WebCore::MediaSourcePrivateClient::~MediaSourcePrivateClient):

        Move registry support from HTMLMediaSource -> MediaSource.
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setRegistry): Moved from HTMLMediaSource.cpp.
        * Modules/mediasource/MediaSource.h:
        (WebCore::MediaSource::lookup): Ditto.

        Update references to HTMLMediaSource -> MediaSource:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::MediaSourceRegistry): 
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * html/HTMLMediaElement.h:

        Update references to HTMLMediaSource -> MediaSourcePrivateClient:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::load):
        (WebCore::MediaPlayer::load): Ditto.
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::open):
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::load):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:

2014-02-10  Alexey Proskuryakov  <ap@apple.com>

        Remove some unused functions from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128407

        Reviewed by Oliver Hunt.

        Removed functions that used Deprecated::ScriptValue

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValue):
        (WebCore::deserializeIDBValueBuffer):
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:

2014-02-10  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed test fix.

        * platform/graphics/cg/GraphicsContextCG.cpp: m_pixelSnappingFactor was not set to 1.
        (WebCore::GraphicsContext::platformInit):

2014-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add GUniqueOutPtr and use it instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127554

        Reviewed by Gustavo Noronha Silva.

        Use GUniqueOutPtr instead of GOwnPtr.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::handleMessage):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::handleMessage):
        * platform/glib/BatteryProviderUPower.cpp:
        (BatteryProviderUPower::startUpdating):
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::getTag):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadResourceSharedBuffer):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURIList):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::readFromFile):
        * platform/gtk/GamepadsGtk.cpp:
        (WebCore::GamepadDeviceGtk::readCallback):
        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::handlePreeditChanged):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::systemFont):
        * platform/gtk/SharedBufferGtk.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/network/gtk/CredentialBackingStore.cpp:
        (WebCore::credentialForChallengeAsyncReadyCallback):
        * platform/network/soup/GOwnPtrSoup.cpp: Removed.
        * platform/network/soup/GOwnPtrSoup.h: Removed.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::redirectSkipCallback):
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::addFileToSoupMessageBody):
        (WebCore::createSoupRequestAndMessageForHandle):
        (WebCore::readCallback):
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):
        (WebCore::connectedCallback):
        (WebCore::readReadyCallback):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::httpProxy):

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

        Automatically generate isRendererOfType in RENDER_OBJECT_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=128520

        Reviewed by Andreas Kling.

        * rendering/RenderObject.h: Updated the RENDER_OBJECT_TYPE_CASTS macro so
        that it generates isRendererOfType specializations as well as type casts
        and also have the type casts use the isRendererOfType function. The macro
        also now uses an argument name of "renderer" and allows for a predicate
        that is more than just a single function call (see RenderTextFragment.h).

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderCounter.h:
        * rendering/RenderElement.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.h:
        Removed specialization of isRendererOfType, since the RENDER_OBJECT_TYPE_CASTS
        macro handles that now. Also removed some unneeded semicolons.

        * rendering/RenderTextFragment.h: Use RENDER_OBJECT_TYPE_CASTS instead of
        hand written casts, now that it can handle a non-trivial predicate.

        * rendering/RenderCombineText.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        Removed unneeded semicolons.

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

        Stop using String::deprecatedCharacters to call WTF::Collator
        https://bugs.webkit.org/show_bug.cgi?id=128517

        Reviewed by Alexey Proskuryakov.

        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction): Create the collator in a single line using the
        new constructor that takes a shouldSortLowercaseFirst boolean. Use the new
        collateUTF8 function instead of upconverting UTF-8 strings to UTF-16 as the old code did.

2014-02-10  Changhun Kang  <temoochin@company100.net>

        Remove unnecessary comment lines.
        https://bugs.webkit.org/show_bug.cgi?id=127894

        Reviewed by Darin Adler.

        No new tests. No change in behavior.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeRequest):

2014-02-10  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix EFL build with INSPECTOR disabled
        https://bugs.webkit.org/show_bug.cgi?id=125064

        Reviewed by Csaba Osztrogonác.

        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/PageInjectedScriptManager.h:

2014-02-10  Zan Dobersek  <zdobersek@igalia.com>

        Fix a few mistakes that landed with r163749.

        Rubber-stamped by Carlos Garcia Campos.

        * platform/gtk/GtkTouchContextHelper.cpp:
        (WebCore::GtkTouchContextHelper::handleEvent): When handling GDK_TOUCH_BEGIN, the assertion
        should ensure that the sequence-to-event map doesn't yet contain pairs with the specific
        sequence as the key.

2014-02-10  David Kilzer  <ddkilzer@apple.com>

        Add type-safe casts for ContentData subclasses
        <http://webkit.org/b/128510>

        Reviewed by Darin Adler.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImages):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        - Switch to toFooContentData() methods.

        * rendering/style/ContentData.h:
        - Define toFooContentData() methods.
        - Extract FooContentData::equals() methods so that the
          toFooContentData() methods can be used.

2014-02-09  Dirk Schulze  <dschulze@chromium.org>

        -webkit-clip-path should support fill, stroke, view-box keywords
        https://bugs.webkit.org/show_bug.cgi?id=128393

        Reviewed by Dean Jackson.

        CSS Masking uses the keywords fill, stroke and view-box for SVG shapes.
        This patch updates the parser, style resolver and SVG implementation of
        the prefixed clip-path property.

        Remove the unexposed and obsolete keyword bounding-box.

        Tests: svg/clip-path/clip-path-shape-fill-expected.svg
               svg/clip-path/clip-path-shape-fill.svg
               svg/clip-path/clip-path-shape-stroke-expected.svg
               svg/clip-path/clip-path-shape-stroke.svg
               svg/clip-path/clip-path-shape-view-box-expected.svg
               svg/clip-path/clip-path-shape-view-box.svg

        * css/CSSParser.cpp: Parse fill, stroke, view-box. Remove bounding-box.
        (WebCore::isBoxValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LayoutBox):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/SVGRenderingContext.cpp: Use different reference boxes per keyword.
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2014-02-09  Dean Jackson  <dino@apple.com>

        [WebGL] Remove state restorer code
        https://bugs.webkit.org/show_bug.cgi?id=128516

        Reviewed by Dirk Schulze.

        I'm not sure what the point of the WebGLStateRestorer class was. It was
        always constructed with a false parameter, and then wasn't even retained
        in local scope (so wouldn't have worked anyway). Meanwhile there were
        also LOTS of calls to cleanupAfterGraphicsCall, the majority of which
        were a no-op. I replaced the handful of cleanupAfterGraphicsCall(true)
        with the call to markContextChanged().

        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::blendColor):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::compressedTexImage2D):
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::cullFace):
        (WebCore::WebGLRenderingContext::depthFunc):
        (WebCore::WebGLRenderingContext::depthMask):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateDrawArrays):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::validateDrawElements):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::finish):
        (WebCore::WebGLRenderingContext::flush):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::frontFace):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::lineWidth):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::polygonOffset):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::releaseShaderCompiler):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::sampleCoverage):
        (WebCore::WebGLRenderingContext::scissor):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::stencilFunc):
        (WebCore::WebGLRenderingContext::stencilFuncSeparate):
        (WebCore::WebGLRenderingContext::stencilMask):
        (WebCore::WebGLRenderingContext::stencilMaskSeparate):
        (WebCore::WebGLRenderingContext::stencilOp):
        (WebCore::WebGLRenderingContext::stencilOpSeparate):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::texSubImage2DBase):
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::viewport):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::drawArraysInstanced):
        (WebCore::WebGLRenderingContext::drawElementsInstanced):
        * html/canvas/WebGLRenderingContext.h:

2014-02-09  Dean Jackson  <dino@apple.com>

        Remove unused layer owner from WebGLLayer
        https://bugs.webkit.org/show_bug.cgi?id=128512

        Reviewed by Dirk Schulze.

        The m_layerOwner and ObjC category were not
        used anywhere.

        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer display]):

2014-02-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove PageClientEfl
        https://bugs.webkit.org/show_bug.cgi?id=128508

        Reviewed by Andreas Kling.

        PageClientEfl was introduced for accelerated compositing of WebKit1, but
        it's bad idea because it's layer violation.
        Indeed, it has never been used since introduced.

        * platform/Widget.h: Back to PlatformPageClient to Evas_Object.
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        Removed empty method which use PageClientEfl.
        * platform/graphics/efl/GraphicsContext3DPrivate.h: Ditto.

2014-02-09  Tim Horton  <timothy_horton@apple.com>

        [iOS][wk2] ASSERT(WebThreadIsCurrent()) in [WebDisplayLinkHandler handleDisplayLink:]
        https://bugs.webkit.org/show_bug.cgi?id=128490

        Reviewed by Simon Fraser.

        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (-[WebDisplayLinkHandler handleDisplayLink:]):
        [WebDisplayLinkHandler handleDisplayLink:] has an ASSERT(WebThreadIsCurrent()).

        We don't use the Web Thread in WebKit2, but it looks like isMainThread()
        does the right thing (main thread if web thread is disabled, web thread
        otherwise), so use that instead.

2014-02-09  Anders Carlsson  <andersca@apple.com>

        Add WTF_MAKE_FAST_ALLOCATED to more classes
        https://bugs.webkit.org/show_bug.cgi?id=128506

        Reviewed by Andreas Kling.

        * dom/Node.h:
        * dom/ScriptElement.h:
        * loader/ImageLoader.h:
        * loader/cache/CachedResourceClient.h:
        * platform/TreeShared.h:
        * platform/graphics/GlyphMetricsMap.h:
        * rendering/InlineBox.h:
        * rendering/RenderLayer.h:
        * rendering/RenderObject.h:

2014-02-09  Andreas Kling  <akling@apple.com>

        Reduce ref churn in ChildNodesLazySnapshot iteration.
        <https://webkit.org/b/128492>

        Add a missing release() in ChildNodesLazySnapshot::nextNode()
        so we don't have to churn the ref count.

        Reviewed by Sam Weinig.

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):

2014-02-09  Andreas Kling  <akling@apple.com>

        Reduce ref churn in ChildInsertionNotifier.
        <https://webkit.org/b/128494>

        All callers of notifyNodeInsertedIntoDocument() already hold a strong
        reference on the Node, so there's no need to ref it again inside.

        Reviewed by Anders Carlsson.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):

2014-02-09  Zan Dobersek  <zdobersek@igalia.com>

        Manage ShadowData through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128466

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr to manage ShadowData objects.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blendSimpleOrMatchedShadowLists):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::setShadow):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::setNext):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/style/StyleRareNonInheritedData.h:

2014-02-09  Carlos Garnacho  <carlosg@gnome.org>

        [GTK] Add touch-events related code to build
        https://bugs.webkit.org/show_bug.cgi?id=98931

        Reviewed by Carlos Garcia Campos.

        Tests in fast/events/touch have been enabled on GTK+ now that touch
        support is implemented, and thus all expected bits are there.

        * platform/gtk/GtkTouchContextHelper.cpp:
        * platform/gtk/GtkTouchContextHelper.h: Add helper object to track all touchpoints, handy
        when creating WebTouchEvents.
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * bindings/gobject/GNUmakefile.am: Add touch related code and idls to build, those are
        necessary now that GTK+ implements touch events.

2014-02-09  Zan Dobersek  <zdobersek@igalia.com>

        Switch the rest of CSS code from OwnPtr over to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128471

        Reviewed by Andreas Kling.

        Replace the remaining uses of OwnPtr in the CSS code with std::unique_ptr, covering
        the CSSParser, CSSParserSelector and CSSSelector classes and a few additional, closely related classes.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::markSupportsRuleHeaderStart):
        (WebCore::CSSParser::createKeyframesRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::rewriteSpecifiersWithElementName):
        (WebCore::CSSParser::rewriteSpecifiers):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::CSSParserSelector):
        (WebCore::CSSParserSelector::~CSSParserSelector):
        (WebCore::CSSParserSelector::adoptSelectorVector):
        (WebCore::CSSParserSelector::insertTagHistory):
        (WebCore::CSSParserSelector::appendTagHistory):
        (WebCore::CSSParserSelector::prependTagSelector):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::releaseSelector):
        (WebCore::CSSParserSelector::setTagHistory):
        (WebCore::CSSParserSelector::clearTagHistory):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::setSelectorList):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * css/CSSSelectorList.h:
        * css/CSSValueList.cpp:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRuleRegion::create):

2014-02-09  Zan Dobersek  <zdobersek@igalia.com>

        Manage MutationObserverInterestGroup through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128468

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr for managing MutationObserverInterestGroup objects.

        * css/PropertySetCSSStyleDeclaration.cpp:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::ChildListMutationAccumulator):
        * dom/ChildListMutationScope.h:
        (WebCore::ChildListMutationAccumulator::hasObservers):
        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        * dom/MutationObserverInterestGroup.h:
        (WebCore::MutationObserverInterestGroup::createForChildListMutation):
        (WebCore::MutationObserverInterestGroup::createForCharacterDataMutation):
        (WebCore::MutationObserverInterestGroup::createForAttributesMutation):

2014-02-09  Zan Dobersek  <zdobersek@igalia.com>

        Manage MessagePort, MessagePortChannel and friends through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128467

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr to manage MessagePort, MessagePortArray, MessagePortChannel
        and MessagePortChannelArray objects.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        (WebCore::MessagePort::entanglePorts):
        * dom/MessagePort.h:
        * dom/MessagePortChannel.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::PlatformMessagePortChannel::EventData::EventData):
        (WebCore::MessagePortChannel::createChannel):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::EventData::channels):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::create):
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        (WebCore::SharedWorkerConnectTask::performTask):
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::createConnectEvent):
        * workers/SharedWorkerRepository.cpp:
        (WebCore::SharedWorkerRepository::connect):
        * workers/SharedWorkerRepository.h:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerGlobalScopeTask::create):
        (WebCore::MessageWorkerGlobalScopeTask::MessageWorkerGlobalScopeTask):
        (WebCore::MessageWorkerGlobalScopeTask::performTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:

2014-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup the interface of FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=128481

        Reviewed by Andreas Kling.

        Removed FrameSelection::end() as intended in r163232, and the stale declaration of
        paintDragCaret() which was supposed to be removed when we extracted DragCaretController.

        Renamed caretRenderer() to caretRendererWithoutUpdatingLayout() to clarify the contract
        as the only caller of this function is RenderBlock::paintCaret. Also renamed bounds()
        to selectionBounds() to make it more easily identifiable / grep'able.

        In addition, made recomputeCaretRect() and invalidateCaretRect() private.

        * WebCore.exp.in:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretRendererWithoutUpdatingLayout):
        (WebCore::FrameSelection::selectionBounds):
        (WebCore::FrameSelection::revealSelection):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::setCaretVisible):
        * page/DragController.cpp:
        (WebCore::dragLocForSelectionDrag):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotSelection):
        * page/win/FrameWin.cpp:
        (WebCore::imageFromSelection):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        * testing/Internals.cpp:
        (WebCore::Internals::selectionBounds):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        Reverted part of r163734, because the assertion it enabled still fails when running
        loader/load-defer-resume-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::dataReceived):

2014-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        EFL build fix after r163729.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::version):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        Remove outdated workarounds in DocumentLoader::dataReceived
        https://bugs.webkit.org/show_bug.cgi?id=128465

        Reviewed by Andreas Kling.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::dataReceived):

2014-02-08  Alexey Proskuryakov  <ap@apple.com>

        Remove some unused functions from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128407

        Reviewed by Oliver Hunt.

        Removed more unused code, particularly in API helpers. Renamed one serialize()
        function to create(), because it does the same thing as other create() functions.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:

2014-02-08  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/versionchange-abort.html fails
        <rdar://problem/16018887> and https://bugs.webkit.org/show_bug.cgi?id=128442

        Reviewed by Dan Bernstein.

        Tested by storage/indexeddb/mozilla/versionchange-abort.html (and probably others)

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::version): If the version is NoIntVersion, return DefaultIntVersion to script.

2014-02-08  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/cursors.html fails
        <rdar://problem/16017998> and https://bugs.webkit.org/show_bug.cgi?id=128423

        Reviewed by Dan Bernstein.

        Tested by storage/indexeddb/mozilla/cursors.html (And probably others)

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform): Distinguish between an error while opening the cursor
          and opening a cursor that points to no records.

2014-02-08  Andreas Kling  <akling@apple.com>

        Remove unused ChromeClient::layoutUpdated().
        <https://webkit.org/b/128470>

        Nobody listens for this callback anymore so remove it.

        Reviewed by Anders Carlsson.

        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        Stop using PLATFORM(MAC) in WebCore except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128464

        Reviewed by Anders Carlsson.

        * Modules/webaudio/AudioContext.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::AudioContext::constructCommon):
        * accessibility/AccessibilityNodeObject.cpp: Ditto.
        (WebCore::AccessibilityNodeObject::visibleText):
        * accessibility/AccessibilityObject.h: Ditto.
        * accessibility/AccessibilityRenderObject.cpp: Ditto.
        (WebCore::AccessibilityRenderObject::clickPoint):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h: Ditto.
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::platform): Made it explicit that this function returns
        "mac" when built for iOS.
        * bindings/js/ScriptController.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::ScriptController::ScriptController):
        * bindings/js/ScriptController.h: Ditto.
        * crypto/CryptoKey.cpp: Changed PLATFORM(MAC) to OS(DARWIN) && !PLATFORM(EFL) &&
        !PLATFORM(GTK) when checking for whether to use CoreCrypto.
        * crypto/keys/CryptoKeyRSA.h: Ditto.
        * dom/Clipboard.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * dom/Document.cpp: Ditto.
        (WebCore::Document::implicitClose):
        * dom/KeyboardEvent.h: Ditto.
        * editing/Editor.cpp: Ditto.
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h: Ditto.
        * editing/FrameSelection.h: Ditto.
        * editing/TypingCommand.cpp: Ditto.
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        * history/HistoryItem.h: Ditto.
        * html/HTMLMediaElement.cpp: Ditto.
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h: Ditto.
        * html/HTMLPlugInElement.cpp: Ditto.
        (WebCore::registeredPluginReplacements):
        * html/HTMLPlugInImageElement.cpp: Ditto.
        (WebCore::HTMLPlugInImageElement::setDisplayState):
        * html/HTMLSelectElement.cpp: Ditto.
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/shadow/MediaControlElements.cpp: Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        * html/shadow/MediaControlElements.h: Ditto.
        * inspector/InspectorIndexedDBAgent.cpp: Ditto.
        * loader/CookieJar.cpp: Ditto.
        * loader/DocumentLoader.cpp: Ditto.
        (WebCore::DocumentLoader::dataReceived):
        * loader/DocumentLoader.h: Ditto.
        (WebCore::DocumentLoader::didTellClientAboutLoad):
        * loader/EmptyClients.h: Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadArchive): Added !PLATFORM(IOS) around Mac-only workaround.
        (WebCore::FrameLoader::defaultObjectContentType): Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::FrameLoader::subresourceCachePolicy): Ditto.
        * loader/ResourceBuffer.h: Changed PLATFORM(MAC) to USE(FOUNDATION) around functions that
        are implemented using Foundation.
        * loader/ResourceLoadScheduler.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * loader/ResourceLoader.cpp: Ditto.
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * loader/ResourceLoader.h: Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp: Ditto.
        * loader/cache/CachedResource.cpp: Changed PLATFORM(MAC) to USE(FOUNDATION) around function
        that is implemented using other USE(FOUNDATION)-guarded code.
        * loader/cache/CachedResource.h: Ditto.
        * page/Chrome.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * page/ChromeClient.h: Ditto.
        * page/ContextMenuClient.h: Ditto.
        * page/ContextMenuController.cpp: Ditto.
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::createAndAppendFontSubMenu):
        (WebCore::ContextMenuController::createAndAppendSpellingAndGrammarSubMenu):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * page/DragClient.h: Ditto.
        * page/DragController.cpp: Ditto.
        (WebCore::dragLocForDHTMLDrag):
        (WebCore::dragLocForSelectionDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        * page/EditorClient.h: Ditto.
        * page/EventHandler.cpp: Ditto.
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::logicalScrollRecursively):
        (WebCore::EventHandler::clearDragState):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::defaultWheelEventHandler):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult):
        * page/EventHandler.h: Ditto.
        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::layout):
        * page/Page.h: Ditto.
        * page/Settings.cpp: Ditto.
        * page/Settings.h: Ditto.
        * page/scrolling/ScrollingCoordinator.cpp: Ditto.
        * page/scrolling/ScrollingCoordinator.h: Ditto.
        * page/scrolling/ScrollingStateNode.h: Removed unused #include.
        * page/scrolling/ScrollingThread.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::ScrollingThread::createThreadIfNeeded):
        * page/scrolling/ScrollingThread.h: Ditto.
        * platform/network/cf/ResourceRequest.h: Added !PLATFORM(IOS) around
        applyWebArchiveHackForMail.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::applyWebArchiveHackForMail): Ditto.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::applyWebArchiveHackForMail): Ditto.
        * plugins/PluginViewNone.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA)
        * rendering/RenderBox.cpp: Ditto.
        (WebCore::RenderBox::logicalScroll):
        * rendering/RenderLayerBacking.cpp: Ditto.
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        * rendering/RenderMenuList.h: Ditto.
        * rendering/RenderText.cpp: Ditto.
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        * rendering/break_lines.cpp: Removed unused #include.
        * testing/js/WebCoreTestSupport.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * xml/XSLStyleSheetLibxslt.cpp: Changed PLATFORM(MAC) to OS(DARWIN) && !PLATFORM(EFL) &&
        !PLATFORM(GTK) around soft-linking libxslt.
        * xml/XSLTExtensions.cpp: Ditto.
        * xml/XSLTProcessorLibxslt.cpp: Ditto.
        * xml/XSLTUnicodeSort.cpp: Ditto.

2014-02-08  Andreas Kling  <akling@apple.com>

        Remove unused ChromeClient::formStateDidChange().
        <https://webkit.org/b/128469>

        Nobody listens for this callback anymore so remove it and stop
        spamming no-op virtual dispatches in forms code.

        Reviewed by Anders Carlsson.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::setFiles):
        * html/HTMLFormControlElementWithState.cpp:
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::selectOption):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setValueCommon):
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2014-02-08  Chris J. Shull  <chrisjshull@gmail.com>

        Web Inspector: Find evaluates attributes in a case sensitive manner
        https://bugs.webkit.org/show_bug.cgi?id=128405

        Reviewed by Timothy Hatcher.

        Changed matchesAttribute to ignore case.

        Updated existing test with additional cases: 
        inspector-protocol/dom/dom-search.html

        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::matchesAttribute):

2014-02-08  Andreas Kling  <akling@apple.com>

        Remove unused FrameLoaderClient::dispatchWillOpenSocketStream().
        <https://webkit.org/b/128472>

        Nobody listens for this callback anymore so remove it.

        Reviewed by Anders Carlsson.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::willOpenSocketStream):
        * loader/FrameLoaderClient.h:

2014-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Split UserTriggered into FireSelectEvent and RevealSelection for selection options
        https://bugs.webkit.org/show_bug.cgi?id=128441

        Reviewed by Darin Adler.

        Split UserTriggered by FireSelectEvent and RevealSelection for selection options.

        Also added defaultSetSelectionOptions() to abstract away the default options.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        * editing/Editor.cpp:
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo):
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent): UserTriggered | DoNotRevealSelection
        is replaced by FireSelectEvent.
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance): Check options & FireSelectEvent
        instead of options & UserTriggered.
        (WebCore::FrameSelection::setSelection): Check options & RevealSelection instead of
        options & UserTriggered && !(options & DoNotRevealSelection).
        (WebCore::FrameSelection::prepareForDestruction):
        (WebCore::FrameSelection::setBase):
        (WebCore::FrameSelection::setExtent):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::defaultSetSelectionOptions): Added.
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selectionChanged): Renamed the argument.
        * html/HTMLTextFormControlElement.h:

2014-02-08  Zan Dobersek  <zdobersek@igalia.com>

        Move TreeScope, IdTargetObserverRegistry to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127276

        Reviewed by Andreas Kling.

        Replace uses of OwnPtr in the TreeScope and IdTargetObserverRegistry classes with std::unique_ptr.

        * dom/IdTargetObserverRegistry.cpp:
        (WebCore::IdTargetObserverRegistry::addObserver):
        * dom/IdTargetObserverRegistry.h:
        (WebCore::IdTargetObserverRegistry::IdTargetObserverRegistry):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::destroyTreeScopeData):
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::labelElementForId):
        * dom/TreeScope.h:
        (WebCore::TreeScope::shouldCacheLabelsByForAttribute):

2014-02-08  Anders Carlsson  <andersca@apple.com>

        Slight CTTE in PingLoader
        https://bugs.webkit.org/show_bug.cgi?id=128462

        Reviewed by Dan Bernstein.

        PingLoader always wants a non-null frame.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::sendPings):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::createPingLoader):
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        Remove client-drawn highlights (-webkit-highlight, WebHTMLHighlighter)
        https://bugs.webkit.org/show_bug.cgi?id=128456

        Reviewed by Anders Carlsson.

        Updated fast/css/getComputedStyle and svg/css results.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Removed CSSPropertyWebKitHighlight case.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPropertyNames.in: Removed -webkit-highlight.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Removed
        CSSPropertyWebKitHighlight handler.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Removed CSSPropertyWebKitHighlight case.
        * page/Chrome.cpp: Removed customHighlightRect and paintCustomHighlight.
        * page/ChromeClient.h: Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Removed painting custom highlight.
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns): Removed adding overflow for custom
        highlights.
        * rendering/RenderBox.cpp: Removed paintCustomHighlight.
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced): Removed painting custom highlight.
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint): Ditto.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): Ditto.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint): Ditto.
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Removed highlight comparison.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Removed initializer.
        (WebCore::StyleRareInheritedData::operator==): Removed highlight comparison.
        * rendering/style/StyleRareInheritedData.h: Removed highlight member variable.

2014-02-08  Dan Bernstein  <mitz@apple.com>

        One more build fix fix.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        More (and more correct) iOS build fix after r163712.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributedStringAppendText):
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::wordsInCurrentParagraph):

2014-02-08  Dan Bernstein  <mitz@apple.com>

        iOS build fix after r163712.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::indexCountOfWordPrecedingSelection):
        (WebCore::Frame::wordsInCurrentParagraph):

2014-02-08  Darin Adler  <darin@apple.com>

        Change TextIterator to use StringView, preparing to wean it from deprecatedCharacters
        https://bugs.webkit.org/show_bug.cgi?id=128233

        Reviewed by Anders Carlsson.

        * accessibility/AccessibilityNodeObject.cpp: Removed unneeded TextIterator.h include.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasMisspelling): Updated to use StringView for checkSpelling.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetSpelling): Changed to take a StringView.
        (AXAttributedStringAppendText): Ditto.
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): Pass StringView.

        * editing/Editor.cpp:
        (WebCore::Editor::misspelledWordAtCaretOrRange): Pass StringView.
        (WebCore::Editor::misspelledSelectionString): Ditto.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Ditto.

        * editing/TextCheckingHelper.cpp:
        (WebCore::findGrammaticalErrors): Renamed this function. Changed to use StringView.
        (WebCore::findMisspellings): Use StringView.
        (WebCore::TextCheckingHelper::findFirstMisspelling): Ditto. Also separated out assertions
        that were asserting multiple things with &&.
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar): Ditto.
        (WebCore::TextCheckingHelper::findFirstGrammarDetail): Ditto.
        (WebCore::TextCheckingHelper::findFirstBadGrammar): Ditto.
        (WebCore::TextCheckingHelper::isUngrammatical): Ditto.
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange): Ditto.
        (WebCore::checkTextOfParagraph): Ditto.

        * editing/TextCheckingHelper.h: Made TextCheckingParagraph::text public. Deleted
        TextCheckingParagraph::textDeprecatedCharacters. Added comments about additional
        TextCheckingParagraph refinements. Changed checkTextOfParagraph to take a client
        reference instead of pointer and StringView instead of characters pointer with length.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::appendTextToStringBuilder): Use data members directly,
        rather than using functions, since we already checked m_textCharacters for null.
        (WebCore::CharacterIterator::string): Use text() instead of characters().
        (WebCore::WordAwareIterator::WordAwareIterator): Removed initialization of
        m_previousText now that it's a StringView rather than a pointer.
        (WebCore::WordAwareIterator::advance): Use TextIterator::text instead of
        TextIterator::characters. Also added a FIXME about a fundamental problem
        with the implementation of this class!
        (WebCore::WordAwareIterator::length): Updated for m_previousText change.
        (WebCore::WordAwareIterator::text): Replaced WordAwareIterator::characters with this.
        (WebCore::SearchBuffer::append): Changed to take a StringView.
        (WebCore::SearchBuffer::prependContext): Ditto.
        (WebCore::SearchBuffer::isWordStartMatch): Use StringView.
        (WebCore::SearchBuffer::search): Ditto.
        (WebCore::findPlainText): Ditto.

        * editing/TextIterator.h: Added TextIterator::text that returns a StringView, and
        renamed TextIterator::characters to TextIterator::deprecatedTextIteratorCharacters
        (easy to search for in source code). Added SimplifiedBackwardsTextIterator::text
        and removed SimplifiedBackwardsTextIterator::characters. Added CharacterIterator::text,
        and removed CharacterIterator::characters. Added WordAwareIterator::text and removed
        WorkdAwareIterator::characters. Changed WordAwareIterator data members to use StringView.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace): Use TextIterator::text instead
        of TextIterator::characters.

        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary): Updated to use StringView.
        (WebCore::nextBoundary): Ditto.
        (WebCore::startWordBoundary): Ditto.
        (WebCore::startOfWord): Ditto.
        (WebCore::endWordBoundary): Ditto.
        (WebCore::endOfWord): Fixed formatting.
        (WebCore::previousWordPositionBoundary): Updated to use StringView.
        (WebCore::previousWordPosition): Fixed formatting and got rid of local variable.
        (WebCore::nextWordPositionBoundary): Updated to use StringView.
        (WebCore::nextWordPosition): Fixed formatting and got rid of local variable.
        (WebCore::inSameLine): Fixed formatting.
        (WebCore::isStartOfLine): Ditto.
        (WebCore::isEndOfLine): Ditto.
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock): Changed to take a reference.
        (WebCore::previousLinePosition): Fixed formatting chand changed to pass a reference.
        (WebCore::nextLinePosition): Ditto.
        (WebCore::startSentenceBoundary): Updated to use StringView and got rid of a local.
        (WebCore::startOfSentence): Fixed formatting.
        (WebCore::endSentenceBoundary): Updated to use StringView and got rid of a local.
        (WebCore::endOfSentence): Fixed formatting.
        (WebCore::previousSentencePositionBoundary): Updated to use StringView and got rid of
        a local.
        (WebCore::previousSentencePosition): Ditto.
        (WebCore::nextSentencePositionBoundary): Ditto.
        (WebCore::nextSentencePosition): Fixed formatting.
        (WebCore::endOfParagraph): Ditto.
        (WebCore::inSameParagraph): Ditto.
        (WebCore::isStartOfParagraph): Ditto.
        (WebCore::isEndOfParagraph): Ditto.
        (WebCore::inSameBlock): Ditto.
        (WebCore::isStartOfBlock): Ditto.
        (WebCore::isEndOfBlock): Ditto.
        (WebCore::startOfDocument): Ditto.
        (WebCore::endOfDocument): Ditto.
        (WebCore::inSameDocument): Ditto.
        (WebCore::isStartOfDocument): Ditto.
        (WebCore::isEndOfDocument): Ditto.
        (WebCore::isEndOfEditableOrNonEditableContent): Ditto.

        * loader/EmptyClients.h: Use StringView.

        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]): Use StringView.

        * platform/text/TextBoundaries.cpp:
        (WebCore::endOfFirstWordBoundaryContext): Use StringView and unsigned.
        (WebCore::startOfLastWordBoundaryContext): Ditto.

        * platform/text/TextBoundaries.h: Change interfaces to use StringView,
        and in some cases, unsigned instead of int. All call sites were better off
        with unsigned.

        * platform/text/TextCheckerClient.h: Use StringView.

        * platform/text/mac/TextBoundaries.mm: Changed conditionals to say
        USE(APPKIT) instead of PLATFORM(IOS), since that's the real issue.
        (WebCore::isSkipCharacter): Tweaked formatting.
        (WebCore::isWhitespaceCharacter): Ditto.
        (WebCore::isWordDelimitingCharacter): Ditto, also removed local variable.
        (WebCore::isSymbolCharacter): Ditto.
        (WebCore::tokenizerForString): Ditto.
        (WebCore::findSimpleWordBoundary): Use StringView. Also changed to mostly
        use unsigned instead of int.
        (WebCore::findComplexWordBoundary): Use StringView. Also restructured to
        be much more readable, with early returns and such.
        (WebCore::findWordBoundary): Use StringView and unsigned.
        (WebCore::findEndWordBoundary): Removed redudant copy of the findWordBoundary
        function and changed this to just call findWordBoundary. The reason this
        function exists is to optimize this case for some non-Mac, non-iOS platforms.
        We can always do that for Mac and/or iOS later if we like.
        (WebCore::findNextWordFromIndex): Use StringView. Also use wordBreakIterator
        instead of using UBreakIterator directly so we get a cached iterator instead
        of creating and destroying a new one each time this function is called.

        * bindings/objc/DOMUIKitExtensions.mm: Removed unneeded includes.
        * dom/Element.cpp: Ditto.
        * dom/PositionIterator.cpp: Ditto.
        * editing/ApplyBlockElementCommand.cpp: Ditto.
        * editing/IndentOutdentCommand.cpp: Ditto.
        * editing/InsertListCommand.cpp: Ditto.
        * editing/markup.cpp: Ditto.
        * html/HTMLElement.cpp: Ditto.
        * html/HTMLTextAreaElement.cpp: Ditto.
        * page/Frame.cpp: Ditto.
        * rendering/RenderTextControl.cpp: Ditto.

2014-02-08  Andreas Kling  <akling@apple.com>

        Remove two unused function declarations.

        Scrub "highQualityRepaintTimerFired" declarations from RenderImage
        and RenderBoxModelObject since they're not actually defined.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.h:

2014-02-08  Andreas Kling  <akling@apple.com>

        CTTE: SVGTRefTargetEventListener is always owned by SVGTRefElement.
        <https://webkit.org/b/128432>

        Tighten up the relationship between SVGTRefElement and its internal
        event listener helper by storing the listener in a Ref, and making
        the listeners backpointer to the element be a reference.

        Reviewed by Anders Carlsson.

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::create):
        (WebCore::SVGTRefTargetEventListener::SVGTRefTargetEventListener):
        (WebCore::SVGTRefTargetEventListener::operator==):
        (WebCore::SVGTRefTargetEventListener::handleEvent):
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTRefElement.h:

2014-02-07  Andreas Kling  <akling@apple.com>

        Devirtualize RenderBlockFlowRareData.
        <https://webkit.org/b/128427>

        This class had a virtual destructor for no reason. Removing it
        shrinks RenderBlockFlowRareData by 8 bytes.

        Reviewed by Anders Carlsson.

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::~RenderBlockFlowRareData):

2014-02-08  Andreas Kling  <akling@apple.com>

        Use renderer iterators in two more places.
        <https://webkit.org/b/128371>

        Reviewed by Antti Koivisto.

        * dom/Position.cpp:
        (WebCore::Position::primaryDirection):

            Use lineageOfType instead of walking the parent chain.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::insertOnlyThisLayer):

            Use childrenOfType instead of walking the children.

2014-02-07  David Kilzer  <ddkilzer@apple.com>

        [ASan] Use new/delete in PODFreeListArena
        <http://webkit.org/b/128437>

        Reviewed by Oliver Hunt.

        * platform/PODFreeListArena.h:
        (WebCore::PODFreeListArena::allocateObject): Use new when
        ADDRESS_SANITIZER is defined.
        (WebCore::PODFreeListArena::freeObject): Use delete when
        ADDRESS_SANITIZER is defined.

2014-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Merge updateSelectionCachesIfSelectionIsInsideTextFormControl into setSelectionWithoutUpdatingAppearance
        https://bugs.webkit.org/show_bug.cgi?id=128439

        Reviewed by Anders Carlsson.

        FrameSelection::selectAll had a superfluous call to updateSelectionCachesIfSelectionIsInsideTextFormControl
        because it wasn't setting UserTriggered option to avoid revealing selection.

        Call setSelection with UserTriggered and recently added DoNotRevealSelection option and merge
        updateSelectionCachesIfSelectionIsInsideTextFormControl into setSelectionWithoutUpdatingAppearance.

        Also rename local variables in setSelectionWithoutUpdatingAppearance, newSelection to
        newSelectionPossiblyWithoutDirection and s to newSelection so that they're self explanatory.

        In addition, we now update the input element's selection caches before calling
        selectFrameElementInParentIfFullySelected but this should be fine because selection cannot simultaneously
        select the entire document and be inside a text form control.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::selectAll):

2014-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        EFL build fix attempt after r163662.

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeIDBKey):

2014-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        FrameSelection's destructor shouldn't notify accessibility
        https://bugs.webkit.org/show_bug.cgi?id=128421

        Reviewed by Benjamin Poulain.

        Extracted setSelectionWithoutUpdatingAppearance out of setSelection and called it in prepareForDestruction
        instead of setting DoNotUpdateAppearance option. This new function doesn't reveal selection or notify
        accessibility code in addition to not updating appearance.

        Note that all implementations of notifyAccessibilityForSelectionChange in FrameSelectionAtk.cpp and
        FrameSelectionMac.mm exit early when the selection type is not caret or either start or end is null,
        which is already the case inside FrameSelection's destructor. In addition, revealSelection is never called
        when selection change was not triggered by user so there should be no behavioral change from this patch.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::prepareForDestruction):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange): Added the trivial implementation in the case
        accessibility is disabled to tidy up call sites.

2014-02-07  Martin Robinson  <mrobinson@igalia.com>

        Build fix for the GTK+ CMake build

        * PlatformGTK.cmake: VTTCue.idl was unintentionally added to the list of GObject DOM bindings
        output files. Remove it.

2014-02-07  Dirk Schulze  <krit@webkit.org>

        Per CSSOM, computed rect() function values must be comma separated
        https://bugs.webkit.org/show_bug.cgi?id=128401

        Reviewed by Simon Fraser.

        Updated tests.

        * css/Rect.h:
        (WebCore::Rect::generateCSSString):

2014-02-07  Gavin Barraclough  <barraclough@apple.com>

        Remove isInitialState flag from Page::setViewState
        https://bugs.webkit.org/show_bug.cgi?id=128428

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
            - removed isInitialState.
        * page/Page.cpp:
        (WebCore::Page::setViewState):
            - removed isInitialState.
        (WebCore::Page::setIsVisible):
            - removed isInitialState.
        (WebCore::Page::setIsVisibleInternal):
            - removed isInitialState.
        * page/Page.h:
            - removed isInitialState.

2014-02-07  Simon Fraser  <simon.fraser@apple.com>

        Encode requestedScrollPosition on ScrollingStateScrollingNodes to send to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=128416

        Reviewed by Tim Horton.
        
        Change requestedScrollPosition() to be a FloatPoint, and export
        ScrollingStateScrollingNode::setRequestedScrollPosition(WebCore::FloatPoint const&, bool)
        for WK2.

        * WebCore.exp.in:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        * page/scrolling/ScrollingStateScrollingNode.h:

2014-02-07  Beth Dakin  <bdakin@apple.com>

        Should get rid of TileController's CoverageForSlowScrolling mode
        https://bugs.webkit.org/show_bug.cgi?id=128339

        Reviewed by Simon Fraser.

        This patch gets rid of CoverageForSlowScrolling in the TileController. It also 
        makes sure that margin tiles are properly invalidated on pages with slow repaint 
        objects that cause slow scrolling. 

        When we invalidate because of slow scrolling, don’t clip the update rect to the 
        layer bounds.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsSlowPath):

        Call new RenderObject paint function repaintSlowRepaintObject() instead of the 
        more-generic repaint().
        (WebCore::FrameView::repaintSlowRepaintObjects):

        Remove CoverageForSlowScrolling.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):

        Handle repainting a slow repaint object. Don’t clip when we shouldn’t, use the 
        RenderView’s backgroundRect as a repaintRect when this is the root background 
        since that will take the extended background rect into consideration.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintSlowRepaintObject):
        * rendering/RenderObject.h:

2014-02-06  Filip Pizlo  <fpizlo@apple.com>

        More FTL build scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=128330

        Reviewed by Geoffrey Garen.

        The FTL already has tests.

        * Configurations/FeatureDefines.xcconfig:

2014-02-07  Alexey Proskuryakov  <ap@apple.com>

        Remove some unused functions from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128407

        Reviewed by Anders Carlsson.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/js/SerializedScriptValue.h:

2014-02-07  Brady Eidson  <beidson@apple.com>

        IDB: Some Mozilla cursor mutation tests fail
        <rdar://problem/16011680> and https://bugs.webkit.org/show_bug.cgi?id=128374

        Reviewed by Sam Weinig.

        Tested by:
        storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html
        storage/indexeddb/mozilla/cursor-mutation.html

        The previous comment about LevelDB was wrong.
        Apparently calling onSuccess() with a null SharedBuffer means the cursor reached the end.
        Update to distinguish between an error and reaching the end:
        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
 
        Add a new IDBKey type - Maximum - To be used in comparisons between keys.
        This will allow the DatabaseProcess to operate on the range of all keys:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::compare):
        * Modules/indexeddb/IDBKey.h:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::minimum):
        (WebCore::IDBKeyData::maximum):

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToJSValue):

        Remove an unused callback:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBRequest.h:

2014-02-07  Roger Fong  <roger_fong@apple.com>

        CGContextGetUserSpaceToDeviceSpaceTransform returns the wrong value on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=128395.
        
        Rubberstamped by Zalan Bujtas.

        The call essentially returns 0 and causes an assertion failure when running many layout tests.

        * platform/graphics/cg/GraphicsContextCG.cpp: Don't make the call on Windows. We default to 1.
        (WebCore::GraphicsContext::platformInit):

2014-02-07  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * platform/PlatformKeyboardEvent.h: Fixed a typo.

2014-02-07  Dan Bernstein  <mitz@apple.com>

        Stop using PLATFORM(MAC) in WebCore/platform except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128404

        Reviewed by Anders Carlsson.

        * Configurations/WebCore.xcconfig: Removed KeyEventMac.mm from
        EXCLUDED_SOURCE_FILE_NAMES_iphoneos, because that file contains !PLATFORM(IOS) guards.
        Removed WheelEventMac.mm from the same definition, because that file no longer exists.
        * platform/ContentFilter.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/ContextMenu.h: Ditto.
        * platform/ContextMenuItem.h: Ditto.
        * platform/Cursor.cpp: Ditto.
        * platform/Cursor.h: Ditto.
        * platform/DragData.cpp: Ditto.
        * platform/DragImage.cpp: Ditto.
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): Changed PLATFORM(MAC) to USE(CF) && !PLATFORM(WIN).
        * platform/LocalizedStrings.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::contextMenuItemTagSearchWeb):
        * platform/LocalizedStrings.h: Ditto.
        * platform/MIMETypeRegistry.cpp: Ditto.
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/PasteboardStrategy.h: Ditto.
        * platform/PlatformKeyboardEvent.h: Ditto.
        * platform/PlatformMenuDescription.h: Ditto.
        * platform/PlatformSpeechSynthesizer.h: Ditto.
        * platform/PlatformWheelEvent.h: Ditto.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/SchemeRegistry.cpp: Ditto.
        (WebCore::localURLSchemes):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::shouldCacheResponsesFromURLSchemeIndefinitely):
        * platform/ScrollAnimator.cpp: Ditto.
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimator.h: Ditto.
        * platform/ScrollView.cpp: Ditto.
        * platform/ScrollView.h: Ditto.
        * platform/ScrollbarThemeComposite.h: Ditto.
        * platform/SharedBuffer.h: Changed PLATFORM(MAC) to USE(FOUNDATION) around NSData-related
        code.
        * platform/URL.h: Changed PLATFORM(MAC) to USE(FOUNDATION) around NSURL-related code.
        * platform/Widget.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/Widget.h: Ditto.
        * platform/audio/AudioSession.cpp: Changed !PLATFORM(MAC) && !PLATFORM(IOS) to
        !PLATFORM(COCOA).
        * platform/audio/HRTFElevation.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/audio/MediaSessionManager.cpp: Ditto.
        * platform/audio/mac/AudioSessionMac.cpp: Updated comment.
        * platform/audio/mac/MediaSessionManagerMac.cpp: Removed PLATFORM(MAC) from Cocoa-only file.
        * platform/cf/SharedBufferCF.cpp: Changed !PLATFORM(MAC) to !USE(FOUNDATION) and updated
        comment.
        * platform/cf/URLCF.cpp: Changed !PLATFORM(MAC) to !USE(FOUNDATION).
        * platform/graphics/BitmapImage.h: Changed one instance of PLATFORM(MAC) to
        USE(CG) || USE(APPKIT), and another to PLATFORM(COCOA).
        * platform/graphics/DisplayRefreshMonitor.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h: Ditto.
        * platform/graphics/FloatPoint.h: Collapsed nested #ifs into a single #if.
        * platform/graphics/FloatRect.h: Ditto.
        * platform/graphics/FloatSize.h: Ditto.
        * platform/graphics/Font.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/graphics/Font.h: Ditto.
        * platform/graphics/FontCache.cpp: Ditto.
        (WebCore::FontCache::getFontData):
        * platform/graphics/FontCache.h: Ditto. Also removed redundant friend class declaration.
        * platform/graphics/FontGlyphs.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):
        * platform/graphics/GlyphPage.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/Image.h: Changed PLATFORM(MAC) to USE(APPKIT) around use of NSImage.
        Changed another PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/graphics/IntRect.h: Collapsed nested #ifs into a single #if.
        * platform/graphics/IntSize.h: Ditto.
        * platform/graphics/MediaPlayer.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/SimpleFontData.cpp: Ditto.
        (WebCore::SimpleFontData::nonSyntheticItalicFontData):
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/SimpleFontData.h: Ditto.
        * platform/graphics/TiledBacking.h: Ditto.
        * platform/graphics/ca/GraphicsLayerCA.cpp: Ditto.
        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        * platform/graphics/ca/LayerFlushScheduler.h: Ditto.
        * platform/graphics/ca/PlatformCAAnimation.h: Ditto.
        * platform/graphics/ca/PlatformCAFilters.h: Ditto.
        * platform/graphics/ca/PlatformCALayer.h: Ditto.
        * platform/graphics/cg/BitmapImageCG.cpp: Ditto.
        * platform/graphics/cg/GraphicsContextCG.cpp: Ditto.
        (WebCore::GraphicsContext::setAllowsFontSmoothing):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h: Ditto.
        * platform/graphics/cg/ImageBufferCG.cpp: Ditto.
        * platform/graphics/cg/ImageBufferDataCG.h: Ditto.
        * platform/graphics/cg/ImageCG.cpp: Ditto.
        * platform/graphics/cg/ImageSourceCG.cpp: Ditto.
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/ImageSourceCG.h: Ditto.
        * platform/graphics/cg/PathCG.cpp: Ditto.
        (WebCore::Path::platformAddPathForRoundedRect):
        * platform/graphics/cg/PatternCG.cpp: Ditto.
        * platform/graphics/gpu/DrawingBuffer.h: Ditto.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView): Removed PLATFORM(MAC) guards, since
        this file is only used on Mac and iOS.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Changed the GL_EXT_draw_buffers check to
        match the implementation.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Changed PLATFORM(MAC) to
        PLATFORM(COCOA).
        * platform/mac/KeyEventMac.mm: Added !PLATFORM(IOS).
        * platform/mac/PlatformEventFactoryMac.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/mac/WebCoreSystemInterface.h: Ditto. Removed redundant check for PLATFORM(MAC).
        * platform/mac/WebCoreSystemInterface.mm: Removed redundant check for PLATFORM(MAC).
        * platform/network/Credential.h: Changed PLATFORM(IOS) || PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/network/NetworkStateNotifier.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/network/NetworkStorageSession.h: Ditto.
        * platform/network/NetworkingContext.h: Ditto.
        * platform/network/ProtectionSpace.cpp: Ditto.
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/ResourceHandle.cpp: Ditto.
        (WebCore::ResourceHandle::clearAuthentication):
        (WebCore::ResourceHandle::shouldContentSniffURL):
        * platform/network/ResourceHandle.h: Ditto.
        * platform/network/ResourceHandleClient.cpp: Ditto.
        * platform/network/ResourceHandleClient.h: Ditto.
        * platform/network/ResourceHandleInternal.h: Ditto.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceRequestBase.cpp: Ditto.
        * platform/network/cf/AuthenticationCF.h: Ditto.
        * platform/network/cf/CookieStorageCFNet.cpp: Ditto.
        * platform/network/cf/CredentialStorageCFNet.cpp: Ditto.
        * platform/network/cf/FormDataStreamCFNet.cpp: Ditto.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Ditto.
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        * platform/network/cf/ResourceError.h: Ditto.
        * platform/network/cf/ResourceHandleCFNet.cpp: Ditto.
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceRequest.h: Ditto.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp: Ditto.
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceResponse.h: Ditto.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        * platform/network/mac/ResourceResponseMac.mm: Ditto.
        * platform/posix/FileSystemPOSIX.cpp: Changed PLATFORM(MAC) to OS(DARWIN) &&
        !PLATFORM(EFL) && !PLATFORM(GTK).
        * platform/text/TextBoundaries.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).

2014-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r154384 and r154674 as they broke selection rect computations for text with ligatures.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:

2014-02-07  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Add support for text document viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=128359

        Reviewed by Simon Fraser.

        Define a set of ViewportParameters suitable for displaying text documents.
        Add a documents class for text document to differentiate them from other type of documents.

        * WebCore.exp.in:
        * dom/Document.h:
        (WebCore::Document::isTextDocument):
        * html/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::webpageParameters):
        (WebCore::ViewportConfiguration::plainTextParameters):
        * page/ViewportConfiguration.h:

2014-02-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        FloatingObject::unsafeClone should not copy m_originatingLine
        https://bugs.webkit.org/show_bug.cgi?id=128381

        Reviewed by Andreas Kling.

        Copying the originatingLine allows to break the invariant that the
        floating object must only contain lines that are owned by the renderer
        it is attached to.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::unsafeClone):

2014-02-07  Brendan Long  <b.long@cablelabs.com>

        Update TextTrack API to current spec
        https://bugs.webkit.org/show_bug.cgi?id=122218

        Refactoring VTTCue out of TextTrackCue.

        Reviewed by Eric Carlson.

        Test: media/track/track-vttcue.html

        * CMakeLists.txt: Add VTTCue and rename RenderTextTrackCue to RenderVTTCue.
        * DerivedSources.cpp: Same.
        * DerivedSources.make: Same.
        * GNUmakefile.list.am: Same.
        * PlatformGTK.cmake:  Same.
        * WebCore.vcxproj/WebCore.vcxproj: Same.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJS): Use VTTCue DOM wrapper for VTTCue and its subclasses.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Convert to VTTCue as needed.
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Same.
        * html/HTMLMediaElement.h: Only print cue.text in debug output if the cue type has a .text attribute
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Convert to VTTCue as needed, and fix TextTrackCueBox to VTTCueBox.
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired): Convert to VTTCue as needed.
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): Use refactored VTTCue attributes.
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Use VTTCue's constructor instead of deprecated TextTrackCue constructor.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode): Convert to VTTCue as needed.
        (WebCore::TextTrack::hasCue): Make this function only accept VTTCues, since it's only used for them anyway, and convert existing cues to VTTCues as needed.
        * html/track/TextTrack.h: Same as hasCue above.
        * html/track/TextTrackCue.cpp: Refactor a lot of code out. Everything that was removed went to VTTCue.cpp.
        (WebCore::TextTrackCue::create): For backwards compatibility, just call VTTCue::create().
        (WebCore::TextTrackCue::TextTrackCue): Refactor a lot of code out.
        (WebCore::TextTrackCue::~TextTrackCue): Same.
        (WebCore::TextTrackCue::didChange): Same.
        (WebCore::TextTrackCue::setIsActive): Same.
        * html/track/TextTrackCue.h: Same.
        * html/track/TextTrackCue.idl: Remove VTTCue attributes and add custom toJS function.
        * html/track/TextTrackCueGeneric.cpp: Use VTTCue instead of TextTrackCue.
        * html/track/TextTrackCueGeneric.h: Same.
        * html/track/VTTCue.cpp: Copied from Source/WebCore/html/track/TextTrackCue.cpp.
        * html/track/VTTCue.h: Copied from Source/WebCore/html/track/TextTrackCue.h.
        * html/track/VTTCue.idl: Copied from Source/WebCore/html/track/TextTrackCue.idl.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues): Use VTTCue instead of TextTrackCue.
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride): Use VTTCueBox instead of TextTrackCueBox.
        * rendering/RenderVTTCue.cpp: Renamed from Source/WebCore/rendering/RenderTextTrackCue.cpp. Changed to use VTTCue instead of TextTrackCue.
        * rendering/RenderVTTCue.h: Renamed from Source/WebCore/rendering/RenderTextTrackCue.h. Changed to use VTTCue instead of TextTrackCue.
        * rendering/RenderingAllInOne.cpp: Rename RenderTextTrackCue to RenderVTTCue.

2014-02-07  Gavin Barraclough  <barraclough@apple.com>

        Should report user input to PageThrottler
        https://bugs.webkit.org/show_bug.cgi?id=128398

        Reviewed by Tim Horton.

        Make sure we wake from AppNap if there is user interaction.

        * page/PageThrottler.h:
        (WebCore::PageThrottler::didReceiveUserInput):
        (WebCore::PageThrottler::pluginDidEvaluate):
            - added, these call reportInterestingEvent()

2014-02-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix for 32-bit iOS.

        Use magic ? values to allow the exported symbol to be different on 32- and 64-bit builds.

        * WebCore.exp.in:

2014-02-07  Anders Carlsson  <andersca@apple.com>

        Convert ProgressTracker to std::chrono
        https://bugs.webkit.org/show_bug.cgi?id=128377

        Reviewed by Andreas Kling.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:

2014-02-07  Alexey Proskuryakov  <ap@apple.com>

        32-bit build fix.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):

2014-02-07  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Unprefix the -webkit-background-blend-mode property

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

        Reviewed by Dean Jackson.

        This patch consist of unprefixing the -webkit-background-blend-mode.
        The property now changes to background-blend-mode.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):

2014-02-07  Samuel White  <samuel_white@apple.com>

        AX: Find and select text with respect to insertion point using accessibility API.
        https://bugs.webkit.org/show_bug.cgi?id=128026

        Reviewed by Chris Fleizach.

        Added facilities to support semi-ambiguous text selection through the accessibility API. All
        requests are handled with respect to the current selection. The requests are disambiguated in
        WebCore using passed parameters such as: SelectStringAfterSelection , ..Before.., ..ClosestTo...,
        etc. Callers can also supply an array of strings to select and the closest that matches the
        disambiguation criteria will be used.

        Test: platform/mac/accessibility/select-text.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeClosestToRange):
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection):
        (WebCore::AccessibilityObject::selectionRange):
        (WebCore::AccessibilityObject::selectText):
        (WebCore::AccessibilityObject::frame):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySelectTextCriteria::AccessibilitySelectTextCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * dom/Position.cpp:
        (WebCore::Position::positionCountBetweenPositions):
        * dom/Position.h:

2014-02-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        FloatingObject m_paginationStrut should be LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=119808

        Reviewed by Andreas Kling.

        Make the paginationStrut in FloatingObject have the same type as all
        of the other paginationStruts in the code.

        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::paginationStrut):
        (WebCore::FloatingObject::setPaginationStrut):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/create-index-with-integer-keys.html fails
        <rdar://problem/16002857> and https://bugs.webkit.org/show_bug.cgi?id=128316

        Reviewed by Geoff Garen.

        Tested by storage/indexeddb/create-index-with-integer-keys.html (and probably some others)

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update): Update createIDBKeyFromScriptValueAndKeyPath usage.
        (WebCore::IDBCursor::setValueReady): Update createIDBKeyFromScriptValueAndKeyPath usage.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put): Update usage of binding utilities.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Update createIDBKeyFromScriptValueAndKeyPath usage.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath): Changed to take an ExecState*.
        (WebCore::deserializeIDBValueBuffer): Added new version that starts with ExecState* and Vector<uint8_t>
          instead of RequestState and SharedBuffer.
        (WebCore::generateIndexKeysForValue): Moved from IDBObjectStore.cpp and changed to take an ExecState*
        * bindings/js/IDBBindingUtilities.h:

        Added new blob fetcher that works with uint8_t buffers:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::getColumnBlobAsVector):
        * platform/sql/SQLiteStatement.h:

        * WebCore.exp.in:

2014-02-07  Frédéric Wang  <fred.wang@free.fr>

        childShouldCreateRenderer should return false for the mspace element
        https://bugs.webkit.org/show_bug.cgi?id=128325

        Reviewed by Chris Fleizach.

        The mspace element can not have children so this makes its
        childShouldCreateRenderer always return false.

        Test: mathml/presentation/mspace-children.html

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::childShouldCreateRenderer):

2014-02-07  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Rename grid-definition-{columns|rows} to match the new syntax
        https://bugs.webkit.org/show_bug.cgi?id=127989

        Reviewed by Andreas Kling.

        In the latest WD, grid-definition-{columns|rows} were renamed to grid-template-{columns|rows}.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-02-07  Andreas Kling  <akling@apple.com>

        CTTE: DocumentThreadableLoader always has a Document.
        <https://webkit.org/b/128364>

        DocumentThreadableLoader always has an "owner" Document, so store
        that as a reference instead of a pointer. Removed some unnecessary
        assertions exposed by this change.

        Reviewed by Antti Koivisto.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously):
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::DocumentThreadableLoader::securityOrigin):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):

2014-02-07  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Vector-effect updates require a re-layout
        https://bugs.webkit.org/show_bug.cgi?id=127553

        Reviewed by Andreas Kling.

        As noted in the stale SVGRenderStyle::diff() comment, now that layout() observes vector-effect
        we need to trigger a re-layout on attribute changes.

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152570&view=revision

        Tests: svg/custom/non-scaling-stroke-update-expected.svg
               svg/custom/non-scaling-stroke-update.svg

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):

2014-02-07  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Renaming isTableElement() to isRenderedTable() as per the FIXME comment
        https://bugs.webkit.org/show_bug.cgi?id=127769

        Reviewed by Andreas Kling.

        Rename method and use IsTable() instead of local type checking.

        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        (WebCore::CompositeEditCommand::moveParagraphWithClones):
        * editing/FrameSelection.cpp:
        (WebCore::caretRendersInsideNode):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::isRenderedTable):
        * editing/htmlediting.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: Remove the entirely unnecessary "Value Key" concept
        https://bugs.webkit.org/show_bug.cgi?id=128360

        Reviewed by Dan Bernstein.

        No new tests (No change in behavior)

        All cursor operations were set up to pass a value key parameter around, but it was:
        1 - Entirely unused
        2 - The same thing that the primary key is supposed to be

        * Modules/indexeddb/IDBCallbacks.h:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clear):
        * Modules/indexeddb/IDBCursorBackend.h:

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-02-06  Jeremy Jones  <jeremyj@apple.com>

        Add support for AVKit fullscreen to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=128143

        Reviewed by Simon Fraser.

        Rename overloaded functions to prevent ambiguous template parameter
        compile error in generated code.

        Rename overloaded exitFullscreen to exitFullscreenWithCompletionHandler.
        Rename overloaded enterFullscreen to enterFullscreenWithCompletionHandler.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenWithCompletionHandler):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenWithCompletionHandler):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        * platform/ios/WebVideoFullscreenModelMediaElement.h:

2014-02-06  Jeffrey Pfau  <jpfau@apple.com>

        loadSubframe can return null in SubframeLoader::loadOrRedirectSubframe
        https://bugs.webkit.org/show_bug.cgi?id=128344

        Reviewed by Ryosuke Niwa.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):

2014-02-06  Andreas Kling  <akling@apple.com>

        Use child iterator in HTMLDetailsElement::findMainSummary().
        <https://webkit.org/b/128335>

        Reviewed by Antti Koivisto.

        * html/HTMLDetailsElement.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findMainSummary):

2014-02-06  Antti Koivisto  <antti@apple.com>

        Add missing &.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):

2014-02-06  Antti Koivisto  <antti@apple.com>

        Check selectors exactly when invalidating style
        https://bugs.webkit.org/show_bug.cgi?id=128321

        Reviewed by Andreas Kling.
        
        Selectors are now really fast to match with the JIT. Take advantage of this by invalidating
        the document style exactly when a new stylesheet arrives (instead of using heuristics).
        
        This reduces need for large style recalculations in some common cases.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::hasMatchedRules):
        * css/RuleSet.h:
        (WebCore::RuleSet::hasShadowPseudoElementRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * css/SelectorChecker.h:
        
            Add new mode where all pseudo elements match so we can invalidate their element.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        (WebCore::invalidateStyleRecursively):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        
            Switch to real selector checker.

        * css/StyleInvalidationAnalysis.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedProperties::~MatchedProperties):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::mediaQueryEvaluator):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):

2014-02-06  Gavin Barraclough  <barraclough@apple.com>

        Remove ChildProcess::m_activeTasks
        https://bugs.webkit.org/show_bug.cgi?id=128342

        Reviewed by Anders Carlson.

        Currently we funnel a number of different user activities
        to a single UserActivity object, which requires a call down
        from WebCore to WebKit2. Split these out so we can track
        them separately.

        * page/ChromeClient.h:
            - removed [inc|dec]rementActivePageCount
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - incrementActivePageCount -> beginActivity
        (WebCore::PageThrottler::~PageThrottler):
            - decrementActivePageCount -> endActivity
        (WebCore::PageThrottler::throttlePage):
            - decrementActivePageCount -> endActivity
        (WebCore::PageThrottler::unthrottlePage):
            - incrementActivePageCount -> beginActivity
        * page/PageThrottler.h:
            - Added m_pageActivity.

2014-02-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163558.
        http://trac.webkit.org/changeset/163558
        https://bugs.webkit.org/show_bug.cgi?id=128350

        Breaks scrolling on certain websites (Requested by bfulgham on
        #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/WheelEventDeltaTracker.h:

2014-02-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in WebCore::AXObjectCache::computedObjectAttributeCache
        https://bugs.webkit.org/show_bug.cgi?id=128310

        Reviewed by Alexey Proskuryakov.

        Be more careful about using axObjectCache() directly since it can return null.
        I audited the usage cases of this method and ensured the ptr was not null in cases
        where I thought we might get hit by this.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::parentObject):
        (WebCore::AccessibilityNodeObject::menuForMenuButton):
        (WebCore::AccessibilityNodeObject::menuButtonForMenu):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        (WebCore::AccessibilityObject::findMatchingObjects):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::isTabItemSelected):
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::nodeIsTextControl):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::AccessibilityRenderObject::textChanged):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):

2014-02-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Rounded Insets Let Content Overlap Shape
        https://bugs.webkit.org/show_bug.cgi?id=127852

        Reviewed by Bem Jones-Bey.

        Using LengthSize to FloatSize conversion from LengthSize.h lead to miscalculated
        inset border radius, when the border radius was defined by percentages. This patch
        fixes the behavior and removes the incorrect conversion.

        Test: fast/shapes/shape-outside-floats/shape-outside-rounded-inset.html

        * css/LengthFunctions.cpp:
        (WebCore::floatSizeForLengthSize): Add new helper function for LengthSize to FloatSize conversion.
        * css/LengthFunctions.h:
        * platform/LengthSize.h: Remove floatSize conversion.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Use new helper function to calculate the right with for the inset border radius.

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Regenerate JSTestObj now that ScriptArguments moved. Generator knows what to do.

        Rubber-stamped by Zalan Bujtas.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):

2014-02-04  Jeffrey Pfau  <jpfau@apple.com>

        Make adoption agency use the task queue
        https://bugs.webkit.org/show_bug.cgi?id=109445

        Reviewed by Ryosuke Niwa.

        Tests: fast/parser/adoption-agency-crash-01.html
               fast/parser/adoption-agency-crash-02.html
               fast/parser/adoption-agency-crash-03.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert):
        (WebCore::executeInsertTask):
        (WebCore::executeReparentTask):
        (WebCore::executeInsertAlreadyParsedChildTask):
        (WebCore::executeTakeAllChildrenTask):
        (WebCore::executeTask):
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::executeQueuedTasks):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::reparent):
        (WebCore::HTMLConstructionSite::insertAlreadyParsedChild):
        (WebCore::HTMLConstructionSite::takeAllChildren):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSiteTask::HTMLConstructionSiteTask):
        (WebCore::HTMLConstructionSiteTask::oldParent):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2014-02-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::writeBarrier shouldn't be static
        https://bugs.webkit.org/show_bug.cgi?id=127807

        Reviewed by Geoffrey Garen.

        Currently it looks up the Heap in which to fire the write barrier by using 
        the cell passed to it. Almost every call site already has a reference to the 
        VM or the Heap itself. It seems wasteful to look it up all over again.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, fix build error on 64bit debug build

        Apply static_cast<long long> to int64_t variable when '%lli' is used.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::setActive):

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Console support to JSContext Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127941

        Reviewed by Geoffrey Garen.

          - Move InspectorConsoleAgent and dependencies to JavaScriptCore
            and into the Inspector namespace.
          - Update Console Message enum types to enum classes and update
            all users to the new, simpler names.
          - Since we are updating addConsoleMessage callsites anyways, add
            ASCIILiteral where appropriate.
          - Add WebConsoleAgent base of Page/Worker ConsoleAgent to implement
            what could not be pushed into JavaScriptCore.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/ConsoleMessage.h: Added.
        * ForwardingHeaders/inspector/ConsoleTypes.h: Added.
        * ForwardingHeaders/inspector/IdentifiersFactory.h: Added.
        * ForwardingHeaders/inspector/ScriptArguments.h: Added.
        * ForwardingHeaders/inspector/ScriptCallFrame.h: Added.
        * ForwardingHeaders/inspector/ScriptCallStack.h: Added.
        * ForwardingHeaders/inspector/ScriptCallStackFactory.h: Added.
        * ForwardingHeaders/inspector/agents/InspectorConsoleAgent.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        Add / remove files from builds.

        * inspector/WebConsoleAgent.h:
        * inspector/WebConsoleAgent.cpp: Added.
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        (WebCore::WebConsoleAgent::setMonitoringXHREnabled):
        (WebCore::WebConsoleAgent::frameWindowDiscarded):
        (WebCore::WebConsoleAgent::didFinishXHRLoading):
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        (WebCore::WebConsoleAgent::addInspectedHeapObject):
        Implement what could not be pushed down into JavaScriptCore.

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::webConsoleAgent):
        (WebCore::InstrumentingAgents::setWebConsoleAgent):
        Hold a WebConsoleAgent instead of InspectorConsoleAgent.

        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::webkitStorageInfo):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::setPanningModel):
        * Modules/webdatabase/DatabaseBase.cpp:
        (WebCore::DatabaseBase::logErrorMessage):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::logErrorMessage):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::setBinaryType):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::didFailSocketStream):
        * Modules/websockets/WebSocketHandshake.cpp:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::logError):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/ViewportArguments.cpp:
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * fileapi/Blob.cpp:
        * fileapi/WebKitBlobBuilder.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorConsoleAgent.h: Removed.
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::addProfile):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::isConsoleAssertMessage):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::clearMessages):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::WebConsoleAgent::~WebConsoleAgent):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        (WebCore::WorkerConsoleAgent::addInspectedNode):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::handleBeforeUnloadEvent):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        (WebCore::createWindow):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::debug):
        (WebCore::Console::error):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        (WebCore::Console::dir):
        (WebCore::Console::dirxml):
        (WebCore::Console::table):
        (WebCore::Console::clear):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        * page/ConsoleTypes.h: Removed.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/DOMSecurityPolicy.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::printErrorMessage):
        * page/DOMWindow.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didFailAccessControlCheck):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        * platform/CrossThreadCopier.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::checkShapeImageOrigin):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * testing/Internals.cpp:
        (WebCore::Internals::consoleMessageArgumentCounts):
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::logExceptionToConsole):
        * workers/SharedWorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerReportingProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::logConsoleError):
        (WebCore::XMLHttpRequest::send):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Convert a parameter to PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=128327

        Reviewed by Timothy Hatcher.

        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addProfile):
        * inspector/InspectorInstrumentation.h:

2014-01-30  Oliver Hunt  <oliver@apple.com>

        Push DOM attributes into the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=127969

        Reviewed by Mark Lam.

        This patch does the actual work of moving dom attributes up the
        prototype chain. There are still a few class and edge cases
        where we can't do this without impacting existing behaviour,
        but they can be fixed separately in later patches.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticPropertySlotEntryWithoutCaching):
        (WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (HasComplexGetOwnProperty):
        (ConstructorShouldBeOnInstance):
        (AttributeShouldBeOnInstance):
        (InstanceAttributeCount):
        (PrototypeAttributeCount):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

2014-02-06  Andreas Kling  <akling@apple.com>

        Remove display:run-in support.
        <https://webkit.org/b/127874>
        <rdar://problem/15926949>

        Remove support for the "run-in" display type. Blink recently removed
        this and Gecko never supported in the first place.

        Rubber-stamped by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        (WebCore::doesNotInheritTextDecoration):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::shouldCheckLines):
        (WebCore::getHeightForLineCount):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        (WebCore::RenderElement::destroyLeftoverChildren):
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateFromStyle):
        (WebCore::RenderInline::renderName):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.cpp:
        * rendering/RenderProgress.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/style/RenderStyleConstants.h:

2014-02-06  Andreas Kling  <akling@apple.com>

        Remove leftover cruft from scoped stylesheet implementation.
        <https://webkit.org/b/128139>

        Kill some pointless non-null checks that were left behind by the
        removed <style scoped> code. Also pruned outdated comments and
        FIXME's about such scopes.

        Reviewed by Antti Koivisto.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkRegionStyle):

2014-02-05  Brent Fulgham  <bfulgham@apple.com>

        Wheel events don't latch to inner scrollable elements 
        https://bugs.webkit.org/show_bug.cgi?id=128225

        Reviewed by Beth Dakin.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Identify the case
        where we have hit the end of a scroll, and treat that as a
        valid 'handled' case. If the scroll event is just starting,
        treat end-of-scroll as unhandled so the parent element can
        handle things.
        * page/WheelEventDeltaTracker.h:
        (WebCore::WheelEventDeltaTracker::isFirstWheelEvent): Added.

2014-02-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163542.
        http://trac.webkit.org/changeset/163542
        https://bugs.webkit.org/show_bug.cgi?id=128324

        Caused many assertion failures (Requested by ap on #webkit).

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Frédéric Wang  <fred.wang@free.fr>

        Do not draw multi-characters <mi> in italic.
        https://bugs.webkit.org/show_bug.cgi?id=44208

        Reviewed by Chris Fleizach.

        This test prevents multi-char <mi> to be drawn in italic and prepare
        further improvements to MathML token and mfenced elements (bugs 124838
        and bug 99620).

        Test: mathml/presentation/tokenElements-dynamic.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        (mi, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::didAttachRenderers):
        (WebCore::MathMLTextElement::childrenChanged):
        (WebCore::MathMLTextElement::createElementRenderer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMathMLToken):
        * rendering/mathml/RenderMathMLToken.cpp: Added.
        (WebCore::RenderMathMLToken::RenderMathMLToken):
        (WebCore::RenderMathMLToken::addChild):
        (WebCore::RenderMathMLToken::createWrapperIfNeeded):
        (WebCore::RenderMathMLToken::updateTokenContent):
        (WebCore::RenderMathMLToken::updateStyle):
        (WebCore::RenderMathMLToken::styleDidChange):
        (WebCore::RenderMathMLToken::updateFromElement):
        * rendering/mathml/RenderMathMLToken.h: Added.
        (WebCore::RenderMathMLToken::element):
        (WebCore::RenderMathMLToken>):

2014-02-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify BasicShapeInset creation
        https://bugs.webkit.org/show_bug.cgi?id=128314

        Reviewed by David Hyatt.

        Introduce convertToLengthSize helper function in order to simplify and make BasicShapeInset more readable.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLengthSize):
        (WebCore::basicShapeForValue):

2014-02-06  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

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

2014-01-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] getComputedStyle() is wrong for grid-definition-{columns|rows}
        https://bugs.webkit.org/show_bug.cgi?id=127033

        Reviewed by Andreas Kling.

        Tests: fast/css-grid-layout/non-grid-columns-rows-get-set-multiple.html
               fast/css-grid-layout/non-grid-columns-rows-get-set.html
               fast/css-grid-layout/non-grid-element-repeat-get-set.html
               fast/css-grid-layout/non-named-grid-line-get-set.html

        According to the specs getComputedStyle() should return the used
        values instead of the resolved values for compatibility with early
        implementations. This means that grid-definition-{columns|rows}
        are now layout dependent as we need to compute the used values for
        grid track sizes.

        Updated the outcome of existing tests and added a bunch of new
        ones that check the behavior of the different properties outside
        grid containers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::valueForGridTrackList):
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::growGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection):
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::resolveGridPositionsFromAutoPlacementPosition):
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2014-02-06  Anders Carlsson  <andersca@apple.com>

        Modernize CrossOriginPreflightResultCache
        https://bugs.webkit.org/show_bug.cgi?id=128309

        Reviewed by Antti Koivisto.

        Use std::chrono::steady_clock instead of currentTime() for determining when
        cache items expire, Use std::unique_ptr instead of OwnPtr, use NeverDestroyed,
        get rid of unnecessary container typedefs now that we have auto. Finally,
        de-indent the entire class declaration.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::CrossOriginPreflightResultCache):
        (WebCore::parseAccessControlMaxAge):
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest):
        (WebCore::CrossOriginPreflightResultCache::shared):
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h:
        (WebCore::CrossOriginPreflightResultCacheItem::CrossOriginPreflightResultCacheItem):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):

2014-02-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Menclose with no notation attribute does not display anything.
        https://bugs.webkit.org/show_bug.cgi?id=127889

        Reviewed by Chris Fleizach.

        Menclose with no notation attribute should behave same as menclose with
        notation attribute with value as longdiv. By default the division
        symbol should be displayed. For empty and invalid notation attribute
        nothing should be displayed.

        Tests: mathml/presentation/menclose-notation-default-longdiv.html
               mathml/presentation/menclose-notation-invalid-empty.html

        * mathml/MathMLMencloseElement.h:
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::paint):
        Added style for menclose with no notation attribute and handled this
        condition in paint also where for longdiv we are explicitly drawing
        the division symbol.

2014-02-05  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::writeBarrier shouldn't be static
        https://bugs.webkit.org/show_bug.cgi?id=127807

        Reviewed by Geoffrey Garen.

        Currently it looks up the Heap in which to fire the write barrier by using 
        the cell passed to it. Almost every call site already has a reference to the 
        VM or the Heap itself. It seems wasteful to look it up all over again.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/clear.html fails
        <rdar://problem/15997155> and https://bugs.webkit.org/show_bug.cgi?id=128282

        Reviewed by David Kilzer.

        Covered by storage/indexeddb/mozilla/clear.html (and probably others)

        Update the value deserializer to take into account whether or not there was an IDBKey:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueBuffer):
        * bindings/js/IDBBindingUtilities.h:

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Call the new form of deserializeIDBValueBuffer.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore): Update logging.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::setActive): Update logging.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit): Fix ASSERTs to reflect multi-process worlds.

2014-02-06  Csaba Osztrogonác  <ossy@webkit.org>

        Re-enable simple line layout on non-Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=123338

        Reviewed by Anders Carlsson.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-02-06  Koop Mast <kwm@FreeBSD.org>

        Use system default compiler instead of gcc, as final fall through.
        https://bugs.webkit.org/show_bug.cgi?id=126773

        Reviewed by Alexey Proskuryakov.

        * dom/make_names.pl:

2014-02-06  Eric Carlson  <eric.carlson@apple.com>

        No need to enterFullscreen() when already in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=128276

        Reviewed by Jer Noble.

        No new tests, this is just cleanup.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Don't call enterFullscreen() if already there.
        (WebCore::HTMLMediaElement::enterFullscreen): Return early if m_isFullscreen is already true.

2014-02-06  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Null dereference applying animation with CSS regions
        https://bugs.webkit.org/show_bug.cgi?id=128218

        Reviewed by Andrei Bucur.

        The first issue (the null dereference) was caused by the checkForZoomChange method
        not guarding against a null parentStyle parameter, as the checkForGenericFamilyChange 
        method does, which in the crashing scenario is called just before the faulty
        checkForZoomChange method.
        The second issue was an assert which was caused by the fact that detaching is performed
        in a certain situation if the element has a renderer or if it's inside a named flow.
        However, when reattaching and asserting the element has no renderer, the 
        "inside named flow" condition was no longer considered.

        Test: fast/regions/animation-element-in-region-flowed-to-other-thread.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkForZoomChange):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachChildren):

2014-02-06  László Langó  <llango.u-szeged@partner.samsung.com>

        Create a HTMLUnknownElement when using createElement('image')
        https://bugs.webkit.org/show_bug.cgi?id=125896

        Reviewed by Antti Koivisto.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/fd8a7b65f3300fb9245db24d5ed240c80b7f76ad

        * html/HTMLTagNames.in:

2014-02-06  Youenn Fablet  <youennf@gmail.com>

        [XHR] Ensure response return null when error flag is set for blob and arraybuffer
        https://bugs.webkit.org/show_bug.cgi?id=127050

        Reviewed by Alexey Proskuryakov.

        Added a check in JSXMLHttpRequest::response to ensure response return null when error flag is set for blob and arraybuffer
        This check also applies to document and json response types (no change in behavior for those types but code path change)
        Added assertions in the related XMLHttpRequest blob and array buffer getters
        Minor code clean-up.
        The test cases check all four response types in case of timeout and abort

        Tests: http/tests/xmlhttprequest/onabort-response-getters.html
               http/tests/xmlhttprequest/ontimeout-response-getters.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didCacheResponseJSON):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::responseBlob):
        (WebCore::XMLHttpRequest::responseArrayBuffer):

2014-02-05  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

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

        Transfer the non-fast-scrollable region to the UI process for iOS
        https://bugs.webkit.org/show_bug.cgi?id=128293

        Reviewed by Benjamin Poulain.

        Two main changes to support sending the non-fast scrollable region
        to the UI process for iOS:
        
        1. Add ScrollingCoordinator::frameViewNonFastScrollableRegionChanged(),
        which is called when we've updated the touch event region (this can happen
        independenly of layout). When called we just scheduled a scrolling tree
        commit with the new region.
        
        2. Avoid thinking that we have a new root node with every remote scrolling
        transaction. This was a side-effect of reconstructing the scrolling state
        tree in the UI process, and caused us to try to grab a nonFastScrollableRegion
        from a node which never had one set.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::setHasNewRootStateNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
        * page/scrolling/ScrollingTree.h:

2014-02-05  Benjamin Poulain  <benjamin@webkit.org>

        [iOS] Synchronize the WKContentView and UIScrollView updates with the tiles being commited
        https://bugs.webkit.org/show_bug.cgi?id=127886

        Reviewed by Simon Fraser.

        The updates of the views on the UIProcess side was completely disconnected
        from the tiles updates from the DrawingArea. There is a non-negligible time
        between the size/scale update and the new tiles coming, which causes
        visual glitches.

        There are three main cases where the tiles and content would be out of sync
        with the UIViews:
        -When loading a new page with different content width of a different viewport.
        -When a page changes its viewport.
        -When the viewport-constrainted viewport size changes.

        To fix the issue, WKView is modified to maintain the old state of WKContentView
        and UIScrollView until the new tiles are available.

        Geometry/scale update are split in two phases:
        1) A source (the page or the user) changes parameters of the geometry. The WebProcess updates
           its layout accordingly.
           At this point, the UIViews are unchanged and are left with the old parameters.
        2) Eventually, new tiles come and commitLayerTree() is called on the drawing area proxy.
           At that point, WKContentView and its UIScrollView are updated to match the committed
           size and scale for the page.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ViewportConfiguration.cpp: Added.
        (WebCore::constraintsAreAllRelative):
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setDefaultConfiguration):
        (WebCore::ViewportConfiguration::setContentsSize):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):
        (WebCore::ViewportConfiguration::setViewportArguments):
        (WebCore::ViewportConfiguration::layoutSize):
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::maximumScale):
        (WebCore::ViewportConfiguration::allowsUserScaling):
        (WebCore::viewportArgumentValueIsValid):
        (WebCore::applyViewportArgument):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfiguration::layoutWidth):
        (WebCore::ViewportConfiguration::layoutHeight):
        * page/ViewportConfiguration.h: Added.
        (WebCore::ViewportConfigurationConfiguration::ViewportConfigurationConfiguration):
        (WebCore::ViewportConfiguration::defaultConfiguration):
        (WebCore::ViewportConfiguration::contentsSize):
        (WebCore::ViewportConfiguration::minimumLayoutSize):
        (WebCore::ViewportConfiguration::viewportArguments):

2014-02-05  Benjamin Poulain  <benjamin@webkit.org>

        SelectorCodeGenerator::generateElementHasTagName should match the local name before the namespace
        https://bugs.webkit.org/show_bug.cgi?id=128167

        Reviewed by Sam Weinig.

        The local name is a stricter filter than the namespace, it should always run first.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):

2014-02-05  Benjamin Poulain  <benjamin@webkit.org>

        Add HTMLNames::classAttr as a regular name in SVGElement::isAnimatableAttribute
        https://bugs.webkit.org/show_bug.cgi?id=128166

        Reviewed by Sam Weinig.

        For historical reasons, classAttr was treated separately. There is no reasons for that anymore.

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

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

        Support encoding and decoding of Regions
        https://bugs.webkit.org/show_bug.cgi?id=128284

        Reviewed by Anders Carlsson.

        Region changes to make it encodable:
        
        Make Region::Span public and give it a default constructor.
        Allow getting and setting of Shape internals, and a way to update
        the Region bounds after changing the shape. Also add a way to test
        for valid spans and segments.

        * platform/graphics/Region.cpp:
        (WebCore::Region::Shape::isValid):
        (WebCore::Region::updateBoundsFromShape):
        * platform/graphics/Region.h:
        (WebCore::Region::isValid):
        (WebCore::Region::Span::Span):
        (WebCore::Region::shapeSegments):
        (WebCore::Region::shapeSpans):
        (WebCore::Region::setShapeSegments):
        (WebCore::Region::setShapeSpans):
        (WebCore::Region::Shape::segments):
        (WebCore::Region::Shape::spans):
        (WebCore::Region::Shape::setSegments):
        (WebCore::Region::Shape::setSpans):

2014-02-05  Andreas Kling  <akling@apple.com>

        Rebaseline the bindings tests after Oliver's hackery.

        * bindings/scripts/test/JS/:

2014-02-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][GTK] Share plugin's implementation between EFL and Gtk ports.
        https://bugs.webkit.org/show_bug.cgi?id=70592

        Reviewed by Gyuyoung Kim.

        Merge common logics of PluginViewGtk.cpp and PluginViewEfl.cpp to PluginViewX11.cpp.
        So, this patch improves the windowless plugin support for the EFL port.

        * GNUmakefile.am: Add include path for gtk2xtbin.h header file.
        * GNUmakefile.list.am: Added PluginViewX11.cpp into source lists.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * plugins/PluginView.h: Added getRootWindow and getPluginDisply which implement platform specific code.
        * plugins/efl/PluginViewEfl.cpp:
        (WebCore::PluginView::getRootWindow):
        (WebCore::PluginView::platformGetValueStatic): Turn on NPNVSupportsWindowless support.
        (WebCore::PluginView::getPluginDisplay):
        (WebCore::PluginView::platformStart):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getRootWindow):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::getPluginDisplay):
        (WebCore::PluginView::platformStart):
        * plugins/x11/PluginViewX11.cpp: Moved common logics from PluginViewGtk.cpp
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):

2014-02-05  Anders Carlsson  <andersca@apple.com>

        Fix a warning.

        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter):
        Remove an unnecessary comparison.

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

        Fix the !ENABLE(PAGE_VISIBILITY_API) build
        https://bugs.webkit.org/show_bug.cgi?id=127907

        Reviewed by Brent Fulgham.

        * page/Page.cpp:
        (WebCore::Page::setIsVisible):

2014-02-05  Oliver Hunt  <oliver@apple.com>

        Change custom getter signature to make the base reference an object pointer
        https://bugs.webkit.org/show_bug.cgi?id=128279

        Reviewed by Geoffrey Garen.

        Update everything to the new calling convention.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * 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::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2014-02-04  Andy Estes  <aestes@apple.com>

        Buffer incoming data in ContentFilter when using NEFilterSource
        https://bugs.webkit.org/show_bug.cgi?id=127979

        Reviewed by Sam Weinig.

        WebFilterEvaluator buffers incoming data and returns it to us as
        replacement data if the load is allowed. NEFilterSource doesn't do
        this, so we need to do our own buffering.

        * platform/ContentFilter.h: Forward-declared NSMutableData and added
        m_originalData.
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter): Constructed m_originalData
        with an initial capacity (if we know the expected content size).
        (WebCore::ContentFilter::addData): Buffered incoming data if we are
        using NEFilterSource.
        (WebCore::ContentFilter::finishedAddingData):
        (WebCore::ContentFilter::getReplacementData): Returned m_originalData
        if the load wasn't blocked.

2014-02-05  Andreas Kling  <akling@apple.com>

        Remove ENABLE(DIRECTORY_UPLOAD).
        <https://webkit.org/b/128275>

        This is a non-standard Chrome extension that none of the WebKit
        ports have even been building.

        Rubber-stamped by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * fileapi/File.cpp:
        * fileapi/File.h:
        * fileapi/File.idl:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::createFileList):
        (WebCore::FileInputType::receiveDroppedFiles):
        * html/FileInputType.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLInputElement.idl:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/FileChooser.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

2014-02-05  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/autoincrement-indexes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=128257

        Reviewed by Sam Weinig.

        Tests: storage/indexeddb/mozilla/autoincrement-indexes.html

        Add some IDBKeyData utility methods for WK2 to use:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::setArrayValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

2014-02-05  Andreas Kling  <akling@apple.com>

        Turn on ENABLE(8BIT_TEXTRUN) for everyone.
        <https://webkit.org/b/128273>

        Reviewed by Anders Carlsson.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:

2014-02-05  Enrica Casucci  <enrica@apple.com>

        WK2: Caret, selections and autocorrection bubbles are incorrectly positioned when inside an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=128264
        <rdar://problem/15986954>

        Reviewed by Simon Fraser.

        Adding new exported function.

        * WebCore.exp.in:

2014-02-05  Antti Koivisto  <antti@apple.com>

        ElementRuleCollector should not use StyleResolver::State
        https://bugs.webkit.org/show_bug.cgi?id=128247

        Reviewed by Andreas Kling.
        
        Make ElementRuleCollector more reusable.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        
            Pass the objects that are actually needed rather than the entire State.

2014-02-05  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Correct copy/paste error in scrolling code.
        https://bugs.webkit.org/show_bug.cgi?id=128258

        Reviewed by Anders Carlsson.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::pinnedInDirection): Use
        'setWidth' when dealing with width metrics.

2014-02-05  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Ruby base oddly justify its text when the text is ideograph and it contains <br> on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=106417

        Reviewed by David Hyatt.

        Ruby base always justify even if a line have hard break.
        Even if next leaf child is line break, InlineTextBox allow trailing expansion.
        This make <br> expanded, and there is odd space at the end of the line.

        Test: fast/text/ruby-justification-br.html

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior):
         - If next leaf child is line break, we should forbid trailing expansion.

2014-02-05  Andreas Kling  <akling@apple.com>

        FrameLoader::stateMachine() should return a reference.
        <https://webkit.org/b/128263>

        There is always a FrameLoaderStateMatchine, so return it by
        reference since it can never be null.

        Reviewed by Anders Carlsson.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForHistoryNavigation):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::stateMachine):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::saveDocumentState):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::storeResourceTimingInitiatorInformation):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):

2014-02-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Move characterAt index checks from InlineIterator to RenderText
        https://bugs.webkit.org/show_bug.cgi?id=128224

        Reviewed by Simon Fraser.

        Move characterAt index checks from InlineIterator to RenderText
        so that all RenderText calls are covered. Few safe instances are
        now covered with uncheckedCharacterAt.

        Merged from Blink:
        http://src.chromium.org/viewvc/blink?view=revision&revision=150830

        Test: fast/text/character-at-crash.html

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::characterAt):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        (WebCore::RenderText::operator[]):
        (WebCore::RenderText::uncheckedCharacterAt):
        (WebCore::RenderText::characterAt):

2014-02-05  Andreas Kling  <akling@apple.com>

        Remove leftover seamless iframe logic from containerForRepaint().
        <https://webkit.org/b/128235>

        The parent-flow-thread-in-different-document case is no longer
        relevant after <iframe seamless> was removed.

        Reviewed by David Hyatt.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2014-02-05  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Dynamically created element with image valued shape-outside doesn't update automatically
        https://bugs.webkit.org/show_bug.cgi?id=128187

        Reviewed by Dean Jackson.

        Corrected the way shape-outside handles the completion of an image load. Move
        the shape-outside imageChanged() logic from RenderBlock to RenderBox and call
        markShapeOutsideDependentsForLayout() instead of parent()->setNeedsLayoutAndPrefWidthsRecalc().
        The latter did not deal with descendants of the shape element's siblings correctly and it
        failed when the shape element was inserted dynamically. The markShapeOutsideDependentsForLayout()
        method can't be called during layout, so the imageChanged() code checks for that. The only
        scenario where imageChanged() can be called during layout (that I've discovered so far anyway)
        is when an SVG Image is renderered  with drawImage(). The Shape::createRasterShape() does this,
        and the corresponding imageChanged() notification can be safely ignored.

        Test: fast/shapes/shape-outside-floats/shape-outside-insert-svg-shape.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):

2014-02-05  Andreas Kling  <akling@apple.com>

        CTTE: ImageLoader is always owned by an Element.
        <https://webkit.org/b/128254>

        - Codify this by making the constructor take Element& or better.
        - Make element() return Element&.
        - Marked HTMLImageLoader and SVGImageLoader final.
        - Made the ImageLoader constructor protected.

        Reviewed by Sam Weinig.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        (WebCore::HTMLImageLoader::sourceURI):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::imageLoader):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::renderImageResource):
        (WebCore::ImageLoader::updatedHasPendingEvent):
        (WebCore::ImageLoader::timerFired):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingLoadEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::element):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::~SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGImageLoader.h:

2014-02-05  Sergio Correia  <sergio.correia@openbossa.org>

        SVG preserveAspectRatio=none is not honored.
        https://bugs.webkit.org/show_bug.cgi?id=111402

        Reviewed by Andreas Kling.

        Previously, preserveAspectRatio=none had no effect on SVG images. This change fixes this so
        we follow the special handling of preserveAspectRatio on images as defined in the spec:
        http://www.w3.org/TR/SVG/single-page.html, 7.8 The ‘preserveAspectRatio’ attribute.

        Images that depend on a container size (such as SVG images) require a call to
        setContainerSizeForRenderer(...) to set this size. By passing the image's intrinsic size
        as the container size, the non-uniform scaling defined in the spec will be achieved.

        Merged from Blink: https://chromiumcodereview.appspot.com/14964004

        Test: svg/custom/image-with-preserveAspectRatio-none.html

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateImageViewport):

2014-02-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify CSSBasicShapeInset::cssText
        https://bugs.webkit.org/show_bug.cgi?id=127841

        Reviewed by David Hyatt.

        I introduced the updateCornerRadiusWidthAndHeight helper function, which makes the code of cssText method clearer.

        No new tests, no behavior change.

        * css/CSSBasicShapes.cpp:
        (WebCore::updateCornerRadiusWidthAndHeight): Add helper function.
        (WebCore::CSSBasicShapeInset::cssText):

2014-02-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify BasicShapeInset::path
        https://bugs.webkit.org/show_bug.cgi?id=127920

        Reviewed by David Hyatt.

        I introduced a new static helper function called floatSizeForLengthSize
        in order to simplify BasicShapeInset::path method.

        No new tests, no behavior change.

        * rendering/style/BasicShapes.cpp:
        (WebCore::floatSizeForLengthSize): New helper function.
        (WebCore::BasicShapeInset::path):

2014-02-05  Wojciech Bielawski  <w.bielawski@samsung.com>

        XMLHttpRequest performs too many copies for ArrayBuffer results
        https://bugs.webkit.org/show_bug.cgi?id=117458

        Reviewed by Alexey Proskuryakov.

        Based on blink change: https://chromium.googlesource.com/chromium/blink/+/bed266aa5a43f7c080c87e527bd35e2b80ecc7b7

        Add SharedBuffer::createArrayBuffer() and use it to create XMLHttpRequest's response in ArrayBuffer
        This cuts
            - two memsets (in ArrayBuffer::create and SharedBuffer::m_buffer::resize)
            - one copy (SharedBuffer::m_buffer to ArrayBufferContents::m_data)
            - one allocation (SharedBuffer::m_buffer)

        No new tests. WebKit desn't provide test mechanism similar to blink's one.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createArrayBuffer):
        * platform/SharedBuffer.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseArrayBuffer):

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

        Remove ENABLE(SVG) guards
        https://bugs.webkit.org/show_bug.cgi?id=127991

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::supportsPath):
        (WebCore::AccessibilityRenderObject::elementPath):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper isSVGGroupElement]):
        * bindings/gobject/GNUmakefile.am:
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::removeReferencedElement):
        * css/CSSCursorImageValue.h:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSFontSelector.cpp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::isAcceptableCSSStyleSheetParent):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isSubtypeExposedToCSSOM):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        * css/SVGCSSParser.cpp:
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::markerShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        * dom/DOMExceptions.in:
        * dom/DOMImplementation.cpp:
        (WebCore::addString):
        (WebCore::isSupportedSVG11Feature):
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::createElement):
        (WebCore::Document::implicitClose):
        (WebCore::Document::hasSVGRootNode):
        * dom/Document.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::boundsInRootViewSpace):
        (WebCore::Element::getBoundingClientRect):
        (WebCore::Element::removedFrom):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::fastAttributeLookupAllowed):
        (WebCore::Element::clearHasPendingResources):
        * dom/Element.h:
        * dom/ElementData.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules):
        * dom/EventListenerMap.cpp:
        * dom/EventListenerMap.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * dom/QualifiedName.cpp:
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/Text.cpp:
        (WebCore::isSVGText):
        (WebCore::Text::createTextRenderer):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLAnchorElement.cpp:
        (WebCore::shouldProhibitLinks):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:
        * html/canvas/DOMPath.h:
        (WebCore::DOMPath::create):
        * html/canvas/DOMPath.idl:
        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * loader/FrameLoader.cpp:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::imageForRenderer):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h:
        * loader/cache/CachedSVGDocumentReference.cpp:
        * loader/cache/CachedSVGDocumentReference.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::embeddedContentBox):
        (WebCore::FrameView::scrollToAnchor):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/graphics/TextRun.cpp:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::getOrCreateCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageElement):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/HitTestLocation.cpp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/InlineBox.h:
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        (WebCore::RenderElement::layerCreationAllowedForSubtree):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderers):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::~FilterInfo):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::nextNodeInsideContentElement):
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::RenderObject::container):
        (WebCore::RenderObject::willBeRemovedFromTree):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canContainFixedPositionObjects):
        (WebCore::RenderObject::preservesNewline):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::inheritFrom):
        (WebCore::RenderStyle::copyNonInheritedFrom):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::inheritedDataShared):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResource.cpp:
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGMarkerData.h:
        * rendering/svg/SVGPathData.cpp:
        * rendering/svg/SVGPathData.h:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGRenderingContext.h:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        * rendering/svg/SVGResourcesCycleSolver.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGSubpathData.h:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunk.h:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextChunkBuilder.h:
        * rendering/svg/SVGTextFragment.h:
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngine.h:
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        * rendering/svg/SVGTextLayoutEngineBaseline.h:
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        * rendering/svg/SVGTextLayoutEngineSpacing.h:
        * rendering/svg/SVGTextMetrics.cpp:
        * rendering/svg/SVGTextMetrics.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextQuery.h:
        * svg/ColorDistance.cpp:
        * svg/ColorDistance.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        * svg/SVGAElement.idl:
        * svg/SVGAltGlyphDefElement.cpp:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphDefElement.idl:
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAltGlyphItemElement.cpp:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAltGlyphItemElement.idl:
        * svg/SVGAngle.cpp:
        * svg/SVGAngle.h:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateMotionElement.idl:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimateTransformElement.idl:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedAngle.idl:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.cpp:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLength.idl:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedLengthList.idl:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberList.idl:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedPreserveAspectRatio.idl:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedRect.idl:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedString.idl:
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedTransformList.idl:
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.idl:
        * svg/SVGAnimatorFactory.h:
        * svg/SVGCircleElement.cpp:
        * svg/SVGCircleElement.h:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGClipPathElement.idl:
        * svg/SVGColor.cpp:
        * svg/SVGColor.h:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        * svg/SVGCursorElement.idl:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDefsElement.h:
        * svg/SVGDefsElement.idl:
        * svg/SVGDescElement.cpp:
        * svg/SVGDescElement.h:
        * svg/SVGDescElement.idl:
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h:
        * svg/SVGDocument.idl:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGElement.idl:
        * svg/SVGElementInstance.cpp:
        * svg/SVGElementInstance.h:
        * svg/SVGElementInstance.idl:
        * svg/SVGElementInstanceList.cpp:
        * svg/SVGElementInstanceList.h:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        * svg/SVGEllipseElement.idl:
        * svg/SVGException.cpp:
        * svg/SVGException.h:
        * svg/SVGException.idl:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGExternalResourcesRequired.idl:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.cpp:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEDropShadowElement.cpp:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.cpp:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.cpp:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFitToViewBox.idl:
        * svg/SVGFontElement.idl:
        * svg/SVGFontFaceElement.idl:
        * svg/SVGFontFaceFormatElement.idl:
        * svg/SVGFontFaceNameElement.cpp:
        * svg/SVGFontFaceNameElement.idl:
        * svg/SVGFontFaceSrcElement.idl:
        * svg/SVGFontFaceUriElement.idl:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.cpp:
        * svg/SVGGElement.h:
        * svg/SVGGElement.idl:
        * svg/SVGGlyphElement.idl:
        * svg/SVGGlyphRefElement.cpp:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGGradientElement.idl:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGHKernElement.idl:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGImageElement.idl:
        * svg/SVGImageLoader.cpp:
        * svg/SVGImageLoader.h:
        * svg/SVGLangSpace.cpp:
        * svg/SVGLangSpace.h:
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLength.idl:
        * svg/SVGLengthContext.cpp:
        * svg/SVGLengthContext.h:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLengthList.idl:
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        * svg/SVGLineElement.idl:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGLinearGradientElement.idl:
        * svg/SVGLocatable.cpp:
        * svg/SVGLocatable.h:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMPathElement.h:
        * svg/SVGMPathElement.idl:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.h:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.cpp:
        * svg/SVGMetadataElement.h:
        * svg/SVGMetadataElement.idl:
        * svg/SVGMissingGlyphElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.cpp:
        * svg/SVGPaint.h:
        * svg/SVGPaint.idl:
        * svg/SVGParserUtilities.cpp:
        * svg/SVGParserUtilities.h:
        * svg/SVGParsingError.h:
        * svg/SVGPathBlender.cpp:
        * svg/SVGPathBlender.h:
        * svg/SVGPathBuilder.cpp:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStream.h:
        * svg/SVGPathByteStreamBuilder.cpp:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.cpp:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:
        * svg/SVGPathParser.cpp:
        * svg/SVGPathParser.h:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSeg.idl:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegArcAbs.h:
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.h:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegClosePath.idl:
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicAbs.h:
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.h:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLinetoAbs.h:
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.h:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.h:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegLinetoVerticalAbs.h:
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.h:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegList.cpp:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegList.idl:
        * svg/SVGPathSegListBuilder.cpp:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.cpp:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMovetoAbs.h:
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.h:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPathSegWithContext.h:
        * svg/SVGPathSource.h:
        * svg/SVGPathStringBuilder.cpp:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPathStringSource.cpp:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPathUtilities.cpp:
        * svg/SVGPathUtilities.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.h:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.cpp:
        * svg/SVGPointList.h:
        * svg/SVGPointList.idl:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGPolylineElement.idl:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRadialGradientElement.idl:
        * svg/SVGRect.h:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        * svg/SVGRectElement.idl:
        * svg/SVGRenderingIntent.h:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGSVGElement.cpp:
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGSetElement.idl:
        * svg/SVGStopElement.cpp:
        * svg/SVGStopElement.h:
        * svg/SVGStopElement.idl:
        * svg/SVGStringList.cpp:
        * svg/SVGStringList.h:
        * svg/SVGStringList.idl:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGStyleElement.idl:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSwitchElement.h:
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGSymbolElement.h:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTRefElement.idl:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTSpanElement.idl:
        * svg/SVGTests.cpp:
        * svg/SVGTests.h:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextElement.idl:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPathElement.idl:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTextPositioningElement.idl:
        * svg/SVGTitleElement.cpp:
        * svg/SVGTitleElement.h:
        * svg/SVGTitleElement.idl:
        * svg/SVGTransform.cpp:
        * svg/SVGTransform.h:
        * svg/SVGTransform.idl:
        * svg/SVGTransformDistance.cpp:
        * svg/SVGTransformDistance.h:
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:
        * svg/SVGTransformList.idl:
        * svg/SVGTransformable.cpp:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        * svg/SVGURIReference.h:
        * svg/SVGURIReference.idl:
        * svg/SVGUnitTypes.h:
        * svg/SVGUnitTypes.idl:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/SVGUseElement.idl:
        * svg/SVGVKernElement.idl:
        * svg/SVGViewElement.cpp:
        * svg/SVGViewElement.h:
        * svg/SVGViewElement.idl:
        * svg/SVGViewSpec.cpp:
        * svg/SVGViewSpec.h:
        * svg/SVGViewSpec.idl:
        * svg/SVGZoomAndPan.cpp:
        * svg/SVGZoomAndPan.h:
        * svg/SVGZoomAndPan.idl:
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:
        * svg/SVGZoomEvent.idl:
        * svg/animation/SMILTime.cpp:
        (WebCore::operator*):
        * svg/animation/SMILTime.h:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/SVGImageChromeClient.h:
        * svg/graphics/SVGImageForContainer.cpp:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        * svg/graphics/filters/SVGFilterBuilder.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedProperty.cpp:
        * svg/properties/SVGAnimatedProperty.h:
        * svg/properties/SVGAnimatedPropertyDescription.h:
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        * svg/properties/SVGAttributeToPropertyMap.h:
        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGProperty.h:
        * svg/properties/SVGPropertyInfo.cpp:
        * svg/properties/SVGPropertyInfo.h:
        * svg/properties/SVGPropertyTearOff.h:
        * svg/properties/SVGPropertyTraits.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        * svg/properties/SVGStaticPropertyTearOff.h:
        * svg/properties/SVGStaticPropertyWithParentTearOff.h:
        * svg/properties/SVGTransformListPropertyTearOff.h:
        * svg/svgattrs.in:
        * svg/svgtags.in:
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/XMLDocumentParser.cpp:

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Manage CalcExpressionNode and derived classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128118

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for CalcExpressionNode and derived classes with std::unique_ptr.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcBinaryOperation::toCalcValue):
        * css/CSSCalculationValue.h:
        * platform/CalculationValue.cpp:
        (WebCore::CalculationValue::create):
        * platform/CalculationValue.h:
        (WebCore::CalculationValue::CalculationValue):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation):
        * platform/Length.cpp:
        (WebCore::Length::blendMixedTypes):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCenterCoordinate::updateComputedLength):

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Remove CLASS_IF_GCC workarounds
        https://bugs.webkit.org/show_bug.cgi?id=128207

        Reviewed by Anders Carlsson.

        Remove the CLASS_IF_GCC macro that was defined to 'class' when using the GCC compiler.
        The macro was then used in class friendship declarations for templated classes to avoid
        corner-case compiler failures on both GCC pre-4.7 and MSVC pre-2013. The problematic
        versions of both compilers are no longer supported, so this macro is good to go.

        * bindings/generic/RuntimeEnabledFeatures.h:

2014-02-05  Ryuan Choi  <ryuan.choi@samsung.com>

        MediaPlayerPrivateGStreamerBase should have virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=128238

        Reviewed by Carlos Garcia Campos.

        MediaPlayerPrivateGStreamer inherit MediaPlayerPrivateGStreamerBase.
        So MediaPlayerPrivateGStreamerBase should have virtual destructor.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: Made destructor as virtual.

2014-02-04  Andreas Kling  <akling@apple.com>

        Remove <iframe seamless> support.
        <https://webkit.org/b/128213>

        Seamless iframes were behind a runtime flag that we never enabled,
        and the only other engine that implemented them (Blink) recently
        removed them. Since the feature is very invasive, let's take it
        out for now.

        Rubber-stamped by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::populatePseudoTypeByNameMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/html.css:
        (iframe):
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        * dom/SecurityContext.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        (WebCore::HTMLIFrameElement::isPresentationAttribute):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::findFrameForNavigation):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::isInChildFrameWithFrameFlattening):
        * page/Location.cpp:
        (WebCore::Location::setLocation):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::shouldComputeSizeAsReplaced):
        (WebCore::RenderIFrame::isInlineBlockOrInlineTable):
        (WebCore::RenderIFrame::flattenFrame):
        (WebCore::RenderIFrame::layout):
        * rendering/RenderIFrame.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::initializeLayoutState):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):

2014-02-04  Tim Horton  <timothy_horton@apple.com>

        [iOS][wk2] Make development builds of WebKit work on device
        https://bugs.webkit.org/show_bug.cgi?id=128230

        Reviewed by Anders Carlsson.

        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsWebProcess):
        Add WebContent.Development as an additional name for the WebContent process.

2014-02-04  Brady Eidson  <beidson@apple.com>

        IDB: indexeddb/mozilla/add-twice-failure.html fails
        <rdar://problem/15982569> and https://bugs.webkit.org/show_bug.cgi?id=128208

        Reviewed by Tim Horton.

        Covered specifically by indexeddb/mozilla/add-twice-failure.html and a handful of others.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onError): Improve logging.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::abort): Improve logging.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform): Don’t abort the transaction when an error occurred.

        * WebCore.exp.in:

2014-02-04  Yoav Weiss  <yoav@yoav.ws>

        Use srcset's pixel density to determine intrinsic size
        https://bugs.webkit.org/show_bug.cgi?id=123832

        Reviewed by Dean Jackson.

        The patch is a port of a similar Blink patch: https://codereview.chromium.org/25105004
        According to the spec "When an img element has a current pixel density that is not 1.0,
        the element's image data must be treated as if its resolution, in device pixels per CSS pixels,
        was the current pixel density."

        I've added that support using the following changes:
        - bestFitSourceForImageAttributes now returns the image candidate to HTMLImageElement.
        - HTMLImageElement passes the devicePixelRatio data to RenderImage, which stores it.
        - Bitmap images are scaled using the devicePixelRatio at RenderImageResource's intrinsicSize() and imageSize().
        - SVG images are scaled using the devicePixelRatio at RenderReplaced::computeAspectRatioInformationForRenderBox.
        - Canvas support added at CanvasRenderingContext2D::size.

        Tests: fast/hidpi/image-srcset-intrinsic-size.html
               fast/hidpi/image-srcset-png-canvas.html
               fast/hidpi/image-srcset-png.html
               fast/hidpi/image-srcset-relative-svg-canvas-2x.html
               fast/hidpi/image-srcset-relative-svg.html
               fast/hidpi/image-srcset-space-left-nomodifier.html
               fast/hidpi/image-srcset-svg-canvas-2x.html
               fast/hidpi/image-srcset-svg-canvas.html
               fast/hidpi/image-srcset-svg.html
               fast/hidpi/image-srcset-svg2.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::createRenderer):
        * html/HTMLImageElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::compareByScaleFactor):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLParserIdioms.h:
        (WebCore::ImageWithScale::ImageWithScale):
        (WebCore::ImageWithScale::imageURL):
        (WebCore::ImageWithScale::scaleFactor):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::setImageDevicePixelRatio):
        (WebCore::RenderImage::imageDevicePixelRatio):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::imageSize):
        (WebCore::RenderImageResource::intrinsicSize):
        (WebCore::RenderImageResource::getImageSize):
        * rendering/RenderImageResource.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox):

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

        Rolled out <http://trac.webkit.org/changeset/163280>:

            Push DOM attributes into the prototype chain
            ​https://bugs.webkit.org/show_bug.cgi?id=127969

        It caused performance regressions, and broken websites on iOS.

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::putDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::getOwnPropertySlot):
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::getOwnPropertySlot):
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertySlot):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::getOwnPropertySlot):
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::getOwnPropertySlot):
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::getOwnPropertySlot):
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsPrototype::getOwnPropertySlot):
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::getOwnPropertySlot):
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::getOwnPropertySlot):
        (WebCore::jsreadonlyConstructor):
        * bindings/scripts/test/JS/JSreadonly.h:

2014-02-04  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto HMAC verification uses a non-constant-time memcmp
        https://bugs.webkit.org/show_bug.cgi?id=128198
        <rdar://problem/15976961>

        Reviewed by Oliver Hunt.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::CryptoAlgorithmHMAC::platformVerify):
        Use a constant time memcmp.

2014-02-04  Simon Fraser  <simon.fraser@apple.com>

        Add WK2 event handling path for iOS, and make Mac and iOS code more similar
        https://bugs.webkit.org/show_bug.cgi?id=128199

        Reviewed by Sam Weinig.

        EventHandlerIOS need some changes for WebKit2, where we have no native
        widget. Merge those changes from EventHandlerMac.
        
        Make a few drive-by changes to match EventHandlerMac behavior.
        
        Clean up EventHandlerMac, removing trailing whitespace and fixing
        the odd comment.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::frameHasPlatformWidget):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::findViewInSubviews):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseMoved):

2014-02-04  Benjamin Poulain  <bpoulain@apple.com>

        [OSX] Limit progress bar's dimensions to ushort
        https://bugs.webkit.org/show_bug.cgi?id=128019

        Wordaround a crash in Quartz until <rdar://problem/15855086> is fixed.

        Reviewed by Sam Weinig.

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

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename StringImpl::getCharacters to StringImpl::characters
        https://bugs.webkit.org/show_bug.cgi?id=128205

        Reviewed by Antti Koivisto.

        Update for WTF changes.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createTextRuns):

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename equalNonNull to equal and make it take const StringImpl& instead
        https://bugs.webkit.org/show_bug.cgi?id=128206

        Reviewed by Andreas Kling.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::threadSafeEqual):
        (WebCore::threadSafeMatch):

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename String::getCharacters to String::characters
        https://bugs.webkit.org/show_bug.cgi?id=128196

        Reviewed by Andreas Kling.

        Update for WTF::String changes.

        * dom/Document.cpp:
        (WebCore::canonicalizedTitle):

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Fix Release build after r163390.

        * platform/audio/MediaSession.cpp: Add "#if !LOG_DISABLED" around logging-only function.

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Refine MediaSession interruptions
        https://bugs.webkit.org/show_bug.cgi?id=128125

        Reviewed by Jer Noble.

        Test: media/video-background-playback.html

        * WebCore.exp.in: Export applicationWillEnterForeground and applicationWillEnterBackground for
            Internals.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play): Ask the media session if playback is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::pause): Ask the media session if pausing is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::mediaType): Return media type based on media characteristics once
            the information is available.
        (WebCore::HTMLMediaElement::resumePlayback): New.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): New, use for logging only.
        (WebCore::HTMLMediaSession::addBehaviorRestriction): Log  restriction changes.
        (WebCore::HTMLMediaSession::removeBehaviorRestriction): Ditto.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::stateName): New, used for logging.
        (WebCore::MediaSession::MediaSession): Don't cache client media type because it can change.
        (WebCore::MediaSession::setState): Log state changes.
        (WebCore::MediaSession::beginInterruption): Remember the current state in case we want to use it
            to restore state when the interruption ends.
        (WebCore::MediaSession::endInterruption): Resume playback if appropriate.
        (WebCore::MediaSession::clientWillBeginPlayback): Track the client's playback state.
        (WebCore::MediaSession::clientWillPausePlayback): Ditto.
        (WebCore::MediaSession::mediaType): Ask client for state.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): m_interruptions -> m_interrupted.
        (WebCore::MediaSessionManager::beginInterruption): Don't assume interruptions are always balanced.
        (WebCore::MediaSessionManager::endInterruption): Ditto.
        (WebCore::MediaSessionManager::addSession): 
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Interrupt client if it is not
            allowed to play in the background.
        (WebCore::MediaSessionManager::applicationWillEnterForeground): End client interruption if it
            was stopped by an interruption.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS): Clear the helper callback.
        (WebCore::MediaSessionManageriOS::resetRestrictions): Mark video as not allowed to play
            while the application is in the background. Register for application suspend/resume
            notifications.
        (-[WebMediaSessionHelper clearCallback]): Set _callback to nil.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): New, notify client of application 
            state change.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.

        * platform/audio/mac/AudioDestinationMac.h: Add resumePlayback.

        * testing/Internals.cpp:
        (WebCore::Internals::applicationWillEnterForeground): New, simulate application context switch.
        (WebCore::Internals::applicationWillEnterBackground): Ditto.
        (WebCore::Internals::setMediaSessionRestrictions): Add "BackgroundPlaybackNotPermitted" restriction.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-04  Andreas Kling  <akling@apple.com>

        Remove CPP bindings generator.
        <https://webkit.org/b/128189>

        Scrub out some leftover Blackberry gunk.

        Reviewed by Anders Carlsson.

        * Modules/webdatabase/SQLResultSet.idl:
        * bindings/cpp/WebDOMCString.cpp: Removed.
        * bindings/cpp/WebDOMCString.h: Removed.
        * bindings/cpp/WebDOMDOMWindowCustom.cpp: Removed.
        * bindings/cpp/WebDOMEventListenerCustom.cpp: Removed.
        * bindings/cpp/WebDOMEventTarget.cpp: Removed.
        * bindings/cpp/WebDOMEventTarget.h: Removed.
        * bindings/cpp/WebDOMHTMLCollectionCustom.cpp: Removed.
        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp: Removed.
        * bindings/cpp/WebDOMHTMLOptionsCollectionCustom.cpp: Removed.
        * bindings/cpp/WebDOMNodeCustom.cpp: Removed.
        * bindings/cpp/WebDOMNodeFilterCustom.cpp: Removed.
        * bindings/cpp/WebDOMObject.h: Removed.
        * bindings/cpp/WebDOMString.cpp: Removed.
        * bindings/cpp/WebDOMString.h: Removed.
        * bindings/cpp/WebExceptionHandler.cpp: Removed.
        * bindings/cpp/WebExceptionHandler.h: Removed.
        * bindings/cpp/WebNativeEventListener.cpp: Removed.
        * bindings/cpp/WebNativeEventListener.h: Removed.
        * bindings/cpp/WebNativeNodeFilterCondition.cpp: Removed.
        * bindings/cpp/WebNativeNodeFilterCondition.h: Removed.
        * bindings/scripts/CodeGeneratorCPP.pm: Removed.
        * bindings/scripts/test/CPP/CPPTestSupplemental.cpp: Removed.
        * bindings/scripts/test/CPP/CPPTestSupplemental.h: Removed.
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMFloat64Array.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCallback.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestException.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestException.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestImplements.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestImplements.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNode.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNode.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSupplemental.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSupplemental.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h: Removed.
        * bindings/scripts/test/CPP/WebDOMattribute.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMattribute.h: Removed.
        * bindings/scripts/test/CPP/WebDOMreadonly.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMreadonly.h: Removed.
        * css/StyleSheet.idl:
        * dom/CustomEvent.idl:
        * dom/Document.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * dom/PopStateEvent.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLInputElement.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * workers/DedicatedWorkerGlobalScope.idl:

2014-02-04  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-03  Zan Dobersek  <zdobersek@igalia.com>

        Manage MediaQuery and MediaQueryExp classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128117

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for the MediaQuery and MediaQueryExp classes with std::unique_ptr.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMediaQuery):
        * css/CSSParser.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        (WebCore::MediaQuerySet::addMediaQuery):
        (WebCore::MediaList::item):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::queryVector):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery):
        * css/MediaQuery.h:
        (WebCore::MediaQuery::expressions):
        (WebCore::MediaQuery::copy):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::copy):

2014-02-04  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove SVG_DOM_OBJC_BINDINGS after r161638.
        https://bugs.webkit.org/show_bug.cgi?id=128182

        Reviewed by Andreas Kling.

        Removed ENABLE(SVG_DOM_OBJC_BINDINGS).

        No tests required.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode boundingBoxes]):
        (-[DOMNode absoluteQuads]):

2014-02-04  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r159609): Images are corrupted when hovering over buttons @ github.com
        https://bugs.webkit.org/show_bug.cgi?id=127729

        Reviewed by Antti Koivisto.

        When clipping a rect, the RenderLayer would not properly save the context when
        the clipping rect is the same as the paint rect and the clipping rect
        has radius.

        Test: fast/regions/repaint/hover-border-radius.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):

2014-02-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Remove workaround for GCC 4.6
        https://bugs.webkit.org/show_bug.cgi?id=128176

        Reviewed by Csaba Osztrogonác.

        Since r162126, WebKit requires at least 4.7.

        * CMakeLists.txt:

2014-02-04  Zan Dobersek  <zdobersek@igalia.com>

        Manage RuleSet and RuleData classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128116

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for the RuleSet and RuleData classes with std::unique_ptr.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::viewSourceStyle):
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::initUserStyle):
        (WebCore::makeRuleSet):
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        * css/DocumentRuleSets.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRegionRule):
        * css/RuleSet.h:
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):

2014-02-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163376.
        http://trac.webkit.org/changeset/163376
        https://bugs.webkit.org/show_bug.cgi?id=128184

        Unexpected test failures. (Requested by eric_carlson on
        #webkit).

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::addBehaviorRestriction):
        (WebCore::HTMLMediaSession::removeBehaviorRestriction):
        (WebCore::HTMLMediaSession::clientWillBeginPlayback):
        * html/HTMLMediaSession.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::beginInterruption):
        (WebCore::MediaSession::endInterruption):
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::mediaType):
        (WebCore::MediaSession::setState):
        (WebCore::MediaSessionClient::beginInterruption):
        (WebCore::MediaSessionClient::endInterruption):
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::beginInterruption):
        (WebCore::MediaSessionManager::endInterruption):
        (WebCore::MediaSessionManager::addSession):
        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (-[WebMediaSessionHelper initWithCallback:]):
        * platform/audio/mac/AudioDestinationMac.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Refine MediaSession interruptions
        https://bugs.webkit.org/show_bug.cgi?id=128125

        Reviewed by Jer Noble.

        Test: media/video-background-playback.html

        * WebCore.exp.in: Export applicationWillEnterForeground and applicationWillEnterBackground for
            Internals.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play): Ask the media session if playback is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::pause): Ask the media session if pausing is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::mediaType): Return media type based on media characteristics once
            the information is available.
        (WebCore::HTMLMediaElement::resumePlayback): New.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): New, use for logging only.
        (WebCore::HTMLMediaSession::addBehaviorRestriction): Log  restriction changes.
        (WebCore::HTMLMediaSession::removeBehaviorRestriction): Ditto.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::stateName): New, used for logging.
        (WebCore::MediaSession::MediaSession): Don't cache client media type because it can change.
        (WebCore::MediaSession::setState): Log state changes.
        (WebCore::MediaSession::beginInterruption): Remember the current state in case we want to use it
            to restore state when the interruption ends.
        (WebCore::MediaSession::endInterruption): Resume playback if appropriate.
        (WebCore::MediaSession::clientWillBeginPlayback): Track the client's playback state.
        (WebCore::MediaSession::clientWillPausePlayback): Ditto.
        (WebCore::MediaSession::mediaType): Ask client for state.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): m_interruptions -> m_interrupted.
        (WebCore::MediaSessionManager::beginInterruption): Don't assume interruptions are always balanced.
        (WebCore::MediaSessionManager::endInterruption): Ditto.
        (WebCore::MediaSessionManager::addSession): 
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Interrupt client if it is not
            allowed to play in the background.
        (WebCore::MediaSessionManager::applicationWillEnterForeground): End client interruption if it
            was stopped by an interruption.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS): Clear the helper callback.
        (WebCore::MediaSessionManageriOS::resetRestrictions): Mark video as not allowed to play
            while the application is in the background. Register for application suspend/resume
            notifications.
        (-[WebMediaSessionHelper clearCallback]): Set _callback to nil.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): New, notify client of application 
            state change.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.

        * platform/audio/mac/AudioDestinationMac.h: Add resumePlayback.

        * testing/Internals.cpp:
        (WebCore::Internals::applicationWillEnterForeground): New, simulate application context switch.
        (WebCore::Internals::applicationWillEnterBackground): Ditto.
        (WebCore::Internals::setMediaSessionRestrictions): Add "BackgroundPlaybackNotPermitted" restriction.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-04  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix Assert SHOULD NEVER BE REACHED in RenderLayer::enclosingElement()
        https://bugs.webkit.org/show_bug.cgi?id=123329

        Reviewed by Mihnea Ovidenie.

        The flowthread doesn't have an enclosing element, so when hitting the layer of the
        flowthread (e.g. the descent area of the RootInlineBox for the image flowed alone
        inside the flow thread) we're letting the hit testing continue so it will hit the region.

        Tests: fast/regions/assert-hit-test-image.html
               fast/regions/auto-size/region-same-height-as-div-with-inline-child.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestContents):

2014-02-04  Mihnea Ovidenie  <mihnea@adobe.com>

        ASSERTION FAILED: !object || (object->isRenderBlock())
        https://bugs.webkit.org/show_bug.cgi?id=127687

        Reviewed by Ryosuke Niwa.

        Currently, when computing the visible position for a point inside a region,
        we transform the point into flow thread coordinates and delegate the processing
        to the first child of the flow thread which we incorrectly assume is a block.
        However, we can specify flow-into also on inline elements which leads to the
        assertion.

        Instead of delegating the processing to the first child when the flow thread
        has children, delegate the computation of the visible position to the
        flow thread and avoid any assumption about the nature of the flow thread
        first child. If the flow thread does not have any children that should be
        rendered by the region, let the region behave like an ordinary element
        with no children.

        Tests: fast/regions/selection/position-for-point-inline-content-node.html
               fast/regions/selection/selection-ended-in-empty-region.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):

2014-02-03  Andreas Kling  <akling@apple.com>

        Remove stray vestige from ::-webkit-distributed selector.
        <https://webkit.org/b/128154>

        Reviewed by Anders Carlsson.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):

2014-02-03  Andreas Kling  <akling@apple.com>

        Remove the CSS @host rule.
        <https://webkit.org/b/128146>

        The @host rule is no longer part of the spec, and besides this code
        was behind ENABLE(SHADOW_DOM) so nobody was building it.

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSAllInOne.cpp:
        * css/CSSGrammar.y.in:
        * css/CSSHostRule.cpp: Removed.
        * css/CSSHostRule.h: Removed.
        * css/CSSHostRule.idl: Removed.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):

2014-02-03  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Do not query the scaling factor when the graphics context is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=128131

        Reviewed by Simon Fraser.

        No existing context to test it.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-03  Hunseop Jeong  <hs85.jeong@samsung.com>

        [Cairo] GraphicsContext::m_pixelSnappingFactor is uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=128102

        Reviewed by Csaba Osztrogonác.

        Initalize m_pixelSnappingFactor to 1

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext): Initialized pixelSnappingFactor to 1 and 
        fixed the coding style violation.

2014-02-03  Brian Burg  <bburg@apple.com>

        Web Replay: upstream base input classes and the input cursor interface
        https://bugs.webkit.org/show_bug.cgi?id=128110

        Reviewed by Joseph Pecoraro.

        Add EventLoopInput, a base class for replay inputs that are handled
        as if they begin a new run loop. For example, navigations, user input,
        network callbacks, and asynchronous timers are modeled by inputs which
        derive from this base class.

        Add the ability to set an InputCursor instance on a Document. This
        is the means for connecting a replay recording to a document context.

        Add forwarding headers for some fundamental replay classes.

        No new tests; no new functionality is exposed.

        * ForwardingHeaders/replay/EmptyInputCursor.h: Added.
        * ForwardingHeaders/replay/InputCursor.h: Added.
        * ForwardingHeaders/replay/NondeterministicInput.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::inputCursor):
        (WebCore::Document::setInputCursor):
        * replay/EventLoopInput.h: Added.
        (WebCore::ReplayPosition::ReplayPosition):
        (WebCore::ReplayPosition::index):
        (WebCore::ReplayPosition::time):
        (WebCore::EventLoopInputBase::EventLoopInputBase):
        (WebCore::EventLoopInputBase::~EventLoopInputBase):
        (WebCore::EventLoopInputBase::setPosition):
        (WebCore::EventLoopInputBase::position):

2014-02-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused code in CSSParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=128135

        Reviewed by Darin Adler.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2014-02-03  Brent Fulgham  <bfulgham@apple.com>

        [Mac] WK1 Clients Only Latch on Momentum Scroll
        https://bugs.webkit.org/show_bug.cgi?id=128133

        Reviewed by Simon Fraser.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::useLatchedEventElement): Update
        predicate to recognize the start and change phases of the wheel
        event as latchable (not just momentum start/change).

2014-02-03  Dean Jackson  <dino@apple.com>

        Feature flag for shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=128001

        Reviewed by Simon Fraser.

        Add CSS_SHAPE_INSIDE flag.

        I wrapped everything that is specific to shape-inside in
        this flag. It is now possible to build with CSS Shapes enabled
        but shape-inside disabled. CSS_SHAPE_INSIDE is dependent on
        CSS_SHAPES, so disabling the latter should also disable the former.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShapeProperty):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingImages):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout):
        (WebCore::RenderBlock::updateShapesAfterBlockLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderView.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/line/LineWidth.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-02-03  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r163018): Can’t scroll in <select> lists
        https://bugs.webkit.org/show_bug.cgi?id=128090

        The regression was caused by the fact that a new method scrollWithWheelEventLocation() was added
        to RenderBox to replace the generic scroll() method for the particular case of scrolling using 
        the mouse wheel. This turned out to be a mistake because in the case of some elements, like select lists, 
        the scroll method was overriden and now the incorrect method was being called.
        The solution was to remove the new method and just add two default parameters to the generic
        scroll method.

        Reviewed by Simon Fraser.

        Test: fast/scrolling/scroll-select-list.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::scroll):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scroll):
        * rendering/RenderTextControlSingleLine.h:

2014-02-03  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit should support @headers/@id for complex accessible web tables
        https://bugs.webkit.org/show_bug.cgi?id=128114

        Reviewed by Darin Adler.

        Expose the headers attribute for table cells to accessibility.

        Test: platform/mac/accessibility/table-headers-attribute.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnHeaders):

2014-02-03  Andreas Kling  <akling@apple.com>

        CTTE: RenderSVGGradientStop always has a SVGStopElement.
        <https://webkit.org/b/128107>

        RenderSVGGradientStop is never anonymous and always has a
        corresponding SVGStopElement. Codify this by adding an element()
        overload that returns an SVGStopElement&.

        Also added missing overrides and made most functions private.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGGradientStop):

2014-02-03  David Kilzer  <ddkilzer@apple.com>

        Remove CachedImageManual class
        <http://webkit.org/b/128043>

        Reviewed by Darin Adler.

        Get rid of the CachedImageManual class by inlining its
        functionality into CachedImage.  This makes it possible to
        de-virtual-ize isManual() (renamed to isManuallyCached()) and to
        make CachedImage final.  The size of CachedImage does not
        increase because we turn an existing bool into a bitfield to add
        an m_isManuallyCached bit, and create a static CachedImageClient
        in MemoryCache.cpp as the "fake" client to keep the manually
        cached image alive in the cache.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Set m_isManuallyCached
        bitfield.  For one overloaded constructor, move the
        CachedImageManual code into the CachedImage constructor.
        (WebCore::CachedImageManual::CachedImageManual): Remove.
        (WebCore::CachedImage::mustRevalidateDueToCacheHeaders): Move
        method from CachedImageManual to CachedImage, and put
        ManuallyCached behavior behind a check.
        * loader/cache/CachedImage.h: Update includes.  Make CachedImage
        final.  Add CachedImage::CacheBehaviorType enum when manually
        cached images are created.  Move CachedImageManual methods into
        CachedImage, remove addFakeClient() and removeFakeClient()
        methods (MemoryCache methods use addClient() and removeClient()
        with a static CachedImageClient), and remove the
        CachedImageManual class definition.  Change
        m_shouldPaintBrokenImage to a bitfield and add
        m_isManuallyCached bitfield.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache): Use std::unique_ptr and
        remove useless NULL check after calling CachedImage constructor.
        (WebCore::MemoryCache::removeImageFromCache):
        - Update to use CachedImage class instead of CachedImageManual.

2014-02-03  Zan Dobersek  <zdobersek@igalia.com>

        Move the webdatabase module source code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127278

        Reviewed by Antti Koivisto.

        Replace the majority of OwnPtr uses in the webdatabase module with std::unique_ptr.
        The only remaining uses are due to ScriptExecutionContext::Task subclasses.

        * Modules/webdatabase/AbstractSQLTransactionBackend.h:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/SQLStatement.cpp:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create):
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::computeNextStateAndCleanupIfNeeded):
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionBackendSync.cpp:
        (WebCore::SQLTransactionBackendSync::SQLTransactionBackendSync):
        (WebCore::SQLTransactionBackendSync::begin):
        (WebCore::SQLTransactionBackendSync::commit):
        (WebCore::SQLTransactionBackendSync::rollback):
        * Modules/webdatabase/SQLTransactionBackendSync.h:

2014-02-03  Andreas Kling  <akling@apple.com>

        CTTE: Grab bag of SVGRenderTreeAsText cleanups.
        <https://webkit.org/b/128099>

        Made some of the DRT SVG functions take more specific types than
        RenderObject. Removed some redundant casts.

        Reviewed by Anders Carlsson.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeSVGContainer):

            Make writeSVGResourceContainer() and writeSVGContainer() take the
            final type instead of RenderObject.

        (WebCore::writeStyle):
        (WebCore::writePositionAndStyle):

            Make these take RenderElement instead of RenderObject.

        (WebCore::writeChildren):

            Use child renderer iterator.

        (WebCore::writeResources):

            Remove unnecessary cast.

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

        Stop using Unicode.h
        https://bugs.webkit.org/show_bug.cgi?id=127633

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBKeyPath.cpp:
        * css/CSSFontFace.h:
        * css/CSSOMUtils.h:
        * css/CSSSegmentedFontFace.h:
        * css/CSSUnicodeRangeValue.h:
        * editing/Editor.cpp:
        * editing/SmartReplace.h:
        * html/parser/HTMLTokenizer.cpp:
        * loader/DocumentLoader.cpp:
        * page/ContextMenuController.cpp:
        * page/Settings.h:
        * platform/DateComponents.h:
        * platform/SharedBuffer.cpp:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontFastPath.cpp:
        * platform/graphics/FontGenericFamilies.h:
        * platform/graphics/FontGlyphs.cpp:
        * platform/graphics/GlyphMetricsMap.h:
        * platform/graphics/GlyphPage.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/SVGGlyph.cpp:
        * platform/graphics/WidthIterator.h:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/win/QTMovie.h:
        * platform/graphics/wince/FontWinCE.cpp:
        * platform/text/BidiContext.h:
        * platform/text/Hyphenation.h:
        * platform/text/LocaleToScriptMapping.h:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBoundaries.h:
        * platform/text/TextBreakIterator.h:
        * platform/text/TextCodec.h:
        * platform/text/TextEncoding.h:
        * platform/text/TextEncodingRegistry.h:
        * platform/text/TextStream.h:
        * platform/text/icu/UTextProvider.h:
        * platform/text/icu/UTextProviderLatin1.h:
        * platform/text/icu/UTextProviderUTF16.h:
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        * platform/win/WebCoreTextRenderer.cpp:
        * rendering/RootInlineBox.cpp:
        * rendering/SimpleLineLayout.cpp:
        * rendering/SimpleLineLayoutFunctions.cpp:
        * rendering/break_lines.h:
        * svg/SVGFontData.cpp:
        Removed includes of <wtf/unicode/Unicode.h>, adding includes of
        ICU headers and <wtf/text/LChar.h> as needed to replace it.

2014-02-03  Jessie Berlin  <jberlin@apple.com>

        Revert r163299 since it broke the ML 32-bit Release build

        * html/HTMLAnchorElement.cpp:
        (WebCore::parsePortFromStringPosition):
        (WebCore::HTMLAnchorElement::hash):
        (WebCore::HTMLAnchorElement::setHash):
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::setHost):
        (WebCore::HTMLAnchorElement::hostname):
        (WebCore::HTMLAnchorElement::setHostname):
        (WebCore::HTMLAnchorElement::pathname):
        (WebCore::HTMLAnchorElement::setPathname):
        (WebCore::HTMLAnchorElement::port):
        (WebCore::HTMLAnchorElement::setPort):
        (WebCore::HTMLAnchorElement::protocol):
        (WebCore::HTMLAnchorElement::setProtocol):
        (WebCore::HTMLAnchorElement::search):
        (WebCore::HTMLAnchorElement::origin):
        (WebCore::HTMLAnchorElement::setSearch):
        (WebCore::HTMLAnchorElement::toString):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/URLUtils.idl:

2014-02-03  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix selection and hover effect of content in region with overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=127101

        Reviewed by Mihnea Ovidenie.

        RenderNamedFlowFragments are not hit candidates. The hit test algorithm will pick the
        parent layer, the one of the region.

        Test: fast/regions/hover-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::isHitCandidate):

2014-02-02  Maciej Stachowiak  <mjs@apple.com>

        Adopt URLUtils interface and template in HTMLAnchorElement and HTMLAreaElement
        https://bugs.webkit.org/show_bug.cgi?id=128067

        Reviewed by Antti Koivisto.

        Tests: fast/dom/HTMLAnchorElement/anchor-password.html
               fast/dom/HTMLAnchorElement/anchor-username.html
               fast/dom/HTMLAreaElement/area-password.html
               fast/dom/HTMLAreaElement/area-username.html

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::setHref): Add version that takes
        (and ignores) ExceptionCode. This is needed because the URLUtil
        base interface is used for URL, which can throw an exception,
        and HTMLAnchorElement, which cannot.
        * html/HTMLAnchorElement.idl: implement URLUtils
        * html/HTMLAreaElement.idl: implement URLUtils
        * html/URLUtils.idl: Treat null as empty string for href

2014-02-03  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-controls through ATK_RELATION_CONTROLLER_FOR
        https://bugs.webkit.org/show_bug.cgi?id=127908

        Reviewed by Chris Fleizach.

        Based on w3c, aria-controls could be exposed through ATK_RELATION_CONTROLLER_FOR.

        Test: accessibility/aria-controls.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIAControls):
        (WebCore::AccessibilityObject::ariaControlsElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIAFlowTo):
        (WebCore::AccessibilityRenderObject::supportsARIAControls):
        (WebCore::AccessibilityRenderObject::ariaControlsElements):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2014-02-03  Andreas Kling  <akling@apple.com>

        RenderSVGResource::removeClientFromCache() should take RenderElement&.
        <https://webkit.org/b/128097>

        Text renderers never have resources associated with them.
        This is yet another step towards enforcing that at compile-time
        by making all the resource cache interfaces deal in RenderElement.

        Also marked the RenderSVGResourceSolidColor class final.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        * rendering/svg/SVGResources.h:

2014-02-03  Dan Bernstein  <mitz@apple.com>

        More iOS build fixing.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2014-02-03  Darin Adler  <darin@apple.com>

        Try to fix iOS build.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::parseToDateComponents):
        Use deprecatedCharacters.

2014-02-02  Darin Adler  <darin@apple.com>

        Obey "delete this" comments, including deleting String::characters and friends
        https://bugs.webkit.org/show_bug.cgi?id=126865

        Reviewed by Andreas Kling.

        * CMakeLists.txt: Deleted HTMLParserErrorCodes.cpp.
        * GNUmakefile.list.am: Deleted HTMLParserErrorCodes.cpp/h, and HTMLParserQuirks.h.
        * WebCore.vcxproj/WebCore.vcxproj: Deleted HTMLParserErrorCodes.cpp/h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/HTMLParserErrorCodes.cpp: Removed.
        * html/HTMLParserErrorCodes.h: Removed.
        * html/HTMLParserQuirks.h: Removed.

        * rendering/RenderText.h: Deleted the characters function, leaving behind the
        deprecatedCharacters function.

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

        IDB: Cannot open new databases with the default version
        https://bugs.webkit.org/show_bug.cgi?id=128096

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openConnectionInternal): Update logic to handle the
          current version being NoIntVersion.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Update ASSERT.

2014-02-02  Darin Adler  <darin@apple.com>

        Fix context save/restore mistake spotted in SVGInlineTextBox::paintTextWithShadows
        https://bugs.webkit.org/show_bug.cgi?id=128095

        Reviewed by Andreas Kling.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows): Move calls to GraphicsContext::restore
        and GraphicsContext::clearShadow before restoreGraphicsContextAfterTextPainting, since that
        function can swap contexts.

2014-02-02  Andreas Kling  <akling@apple.com>

        Modernize RenderSVGText::locateRenderSVGTextAncestor().
        <https://webkit.org/b/128093>

        Make locateRenderSVGTextAncestor() take a reference, and simplify it
        internally with lineageOfType.

        Switched callers to use 'auto' for the return type so we get some
        devirtualization freebies.

        Reviewed by Anders Carlsson.

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox):
        (WebCore::RenderSVGInline::strokeBoundingBox):
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGInline::absoluteQuads):
        (WebCore::RenderSVGInline::addChild):
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::locateRenderSVGTextAncestor):
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText>):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):

2014-02-02  Andreas Kling  <akling@apple.com>

        Modernize the toRenderSVGResourceContainer() helper.
        <https://webkit.org/b/128091>

        Make toRenderSVGResourceContainer() a free function like all the
        other casting helpers. Use references instead of pointers where
        applicable.

        Reviewed by Anders Carlsson.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resolveCycles):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::svgAttributeChanged):

2014-02-02  Andreas Kling  <akling@apple.com>

        Minor SVGRootInlineBox cleanup.
        <https://webkit.org/b/128094>

        Remove two virtual functions and sprinkle some missing overrides.

        Reviewed by Anders Carlsson.

        * rendering/svg/SVGRootInlineBox.h:

2014-01-30  Oliver Hunt  <oliver@apple.com>

        Push DOM attributes into the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=127969

        Reviewed by Mark Lam.

        This patch does the actual work of moving dom attributes up the
        prototype chain. There are still a few class and edge cases
        where we can't do this without impacting existing behaviour,
        but they can be fixed separately in later patches.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticPropertySlotEntryWithoutCaching):
        (WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (HasComplexGetOwnProperty):
        (ConstructorShouldBeOnInstance):
        (AttributeShouldBeOnInstance):
        (InstanceAttributeCount):
        (PrototypeAttributeCount):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

2014-02-02  Andreas Kling  <akling@apple.com>

        RenderSVGResourceContainer clients are always RenderElement.
        <https://webkit.org/b/128088>

        All clients of RenderSVGResourceContainer are going to be RenderElement,
        so make the interface take RenderElement& instead of RenderObject*.

        Also modernized the code a bit with C++11 range for loops.

        Reviewed by Sam Weinig.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::addClient):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderer):
        (WebCore::SVGResourcesCache::removeResourcesFromRenderer):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Use floorf/roundf/fabs in device snapping helpers.
        https://bugs.webkit.org/show_bug.cgi?id=128075

        Reviewed by Darin Adler.

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):
        (WebCore::floorToDevicePixel):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-02  Andreas Kling  <akling@apple.com>

        SVGDocumentExtensions::resourcesCache() should return a reference.
        <https://webkit.org/b/128087>

        The SVGResourcesCache is always present when the Document is using
        SVG extensions, so make this return a reference and propagate that
        knowledge to the call site.

        This gets rid of an assertion and some rickety looking ->'s.
        Also converted a loop to use C++11 range for syntax.

        Reviewed by Sam Weinig.

        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::resourcesCacheFromRenderer):
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        (WebCore::SVGResourcesCache::clientDestroyed):
        (WebCore::SVGResourcesCache::resourceDestroyed):
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::resourcesCache):

2014-02-02  Andreas Kling  <akling@apple.com>

        RenderSVGInlineText::computeNewScaledFontForStyle() should take references.
        <https://webkit.org/b/128086>

        Make computeNewScaledFontForStyle() take renderer and style by reference
        instead of taking a pointer and asserting that it's non-null.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::updateScaledFont):
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::shouldTransformOnTextPainting):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::calculateScreenFontSizeScalingFactor):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):
        * rendering/svg/SVGRenderingContext.h:

2014-02-02  Darin Adler  <darin@apple.com>

        Still more characters -> deprecatedCharacters (EWS keeps finding more)
        https://bugs.webkit.org/show_bug.cgi?id=128076

        Reviewed by Andreas Kling.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures):
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        Use deprecatedCharacters.

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Enable subpixel positioning/sizing/hairline border painting.
        https://bugs.webkit.org/show_bug.cgi?id=128009

        Reviewed by Simon Fraser.

        Snap and clip to device pixels when painting boxes. Enable hairline painting
        for solid border.

        No existing context to test this functionality yet.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):

2014-02-02  Sam Weinig  <sam@webkit.org>

        Add some missing override keywords
        https://bugs.webkit.org/show_bug.cgi?id=128082

        Reviewed by Antti Koivisto.

        * loader/DocumentThreadableLoader.h:
        * loader/LinkLoader.h:
        * loader/TextTrackLoader.h:
        * xml/parser/XMLDocumentParser.h:

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

        IDB: Support IDBFactory.deleteDatabase()
        https://bugs.webkit.org/show_bug.cgi?id=128060

        Reviewed by Filip Pizlo and Maciej Stachowiak (filesystem parts also Tim Hatcher and Simon Fraser)

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::deleteDatabaseAsync):

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::deleteDatabase):

        Change factory-level deleteDatabase to take opening and main frame origins:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * WebCore.exp.in:

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Introduce device pixel snapping helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=128049

        Reviewed by Simon Fraser.

        These functions help device pixel snapping during painting. They follow the logic of
        the corresponding pixelSnappedInt* functions.

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):
        (WebCore::floorToDevicePixel):
        (WebCore::snapSizeToPixel):
        (WebCore::snapSizeToDevicePixel):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::pixelSnappingFactor):
        * platform/graphics/LayoutRect.h:
        (WebCore::pixelSnappedForPainting):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Floor thickness and length after switching from int to float.
        https://bugs.webkit.org/show_bug.cgi?id=128071

        Reviewed by Antti Koivisto.

        This is a temporary solution to fix the assertion on empty line drawing until after
        device pixel snapping is added.

        Covered by existing tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):

2014-02-02  Antti Koivisto  <antti@apple.com>

        Remove StyleScopeResolver
        https://bugs.webkit.org/show_bug.cgi?id=128069

        Reviewed by Anders Carlsson.

        This is dead code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        (WebCore::DocumentRuleSets::collectFeatures):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pushParentElement):
        (WebCore::StyleResolver::popParentElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::document):
        * css/StyleScopeResolver.cpp: Removed.
        * css/StyleScopeResolver.h: Removed.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::resolveShadowTree):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make BorderEdge/RoundedRect::Radii LayoutUnit aware.
        https://bugs.webkit.org/show_bug.cgi?id=128036

        Reviewed by Darin Adler.

        Covered by existing tests.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::operator++):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::calculateSideRectIncludingInner):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderObject.h:
        * rendering/style/BorderData.h:
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):
        * rendering/style/RenderStyle.h:

2014-02-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        REGRESSION(r163234) Debug build is broken
        https://bugs.webkit.org/show_bug.cgi?id=128059

        Unreviewed. Debug build is broken with INDEXED_DATABASE.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString): Added the default: case.

2014-02-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: LayoutUnit operator++ is broken.
        https://bugs.webkit.org/show_bug.cgi?id=128056

        Reviewed by Darin Adler.

        Add pre-increment operator++.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::operator++):

2014-02-01  Darin Adler  <darin@apple.com>

        More characters -> deprecatedCharacters (based on more EWS complaints)
        https://bugs.webkit.org/show_bug.cgi?id=128063

        Reviewed by Anders Carlsson.

        * editing/SmartReplace.cpp:
        (WebCore::addAllCodePoints):
        (WebCore::getSmartSet):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        Use deprecatedCharacters.

2014-02-01  Darin Adler  <darin@apple.com>

        Use deprecatedCharacters in a few more places (non-Mac-build sites found by EWS)
        https://bugs.webkit.org/show_bug.cgi?id=128042

        Reviewed by Sam Weinig.

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeString):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::createGDIFont):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL):
        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponent):
        (WebCore::fileSystemRepresentation):
        * platform/win/PasteboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::Pasteboard::writeURLToDataObject):
        (WebCore::createGlobalImageFileDescriptor):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        Call deprecatedCharacters instead of characters.

2014-02-01  Enrica Casucci  <enrica@apple.com>

        Add support for ActionSheets in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127586
        <rdar://problem/15283667>

        Reviewed by Benjamin Poulain.

        Updates the localizable strings for action sheets.

        * English.lproj/Localizable.strings:

2014-02-01  Maciej Stachowiak  <mjs@apple.com>

        Factor URL decomposition methods (from URLUtils interface) into a base template
        https://bugs.webkit.org/show_bug.cgi?id=128052

        Reviewed by Sam Weinig.

        Refactoring only; no new tests.

        * html/DOMURL.cpp:
        * html/DOMURL.h:
        (WebCore::DOMURL::href): Moved to header and made inline.
        * html/URLUtils.h: Added. 
        (WebCore::URLUtils::href): Downcast and call the derived class.
        (WebCore::URLUtils::setHref): Downcast and call the derived class.
        Functions below factored out from DOMURL.cpp.
        (WebCore::URLUtils<T>::toString):
        (WebCore::URLUtils<T>::origin):
        (WebCore::URLUtils<T>::protocol):
        (WebCore::URLUtils<T>::setProtocol):
        (WebCore::URLUtils<T>::username):
        (WebCore::URLUtils<T>::setUsername):
        (WebCore::URLUtils<T>::password):
        (WebCore::URLUtils<T>::setPassword):
        (WebCore::URLUtils<T>::host):
        (WebCore::parsePortFromStringPosition):
        (WebCore::URLUtils<T>::setHost):
        (WebCore::URLUtils<T>::hostname):
        (WebCore::URLUtils<T>::setHostname):
        (WebCore::URLUtils<T>::port):
        (WebCore::URLUtils<T>::setPort):
        (WebCore::URLUtils<T>::pathname):
        (WebCore::URLUtils<T>::setPathname):
        (WebCore::URLUtils<T>::search):
        (WebCore::URLUtils<T>::setSearch):
        (WebCore::URLUtils<T>::hash):
        (WebCore::URLUtils<T>::setHash):

        Add mention of new header.
        * GNUmakefile.list.am: 
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2014-02-01  Benjamin Poulain  <bpoulain@apple.com>

        Improve the JavaScript bindings of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127971

        Unriewed.

        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        Follow up for r163239. Darin pointed out the #includes are wrong.

2014-02-01  Brady Eidson  <beidson@apple.com>

        IDB: Implement IDBObjectStore.delete()
        https://bugs.webkit.org/show_bug.cgi?id=127880

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::compare): Make this const.
        * Modules/indexeddb/IDBKeyData.h:

        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::isExactlyOneKey): Returns whether or not
          the key range is known to represent precisely one key.
        * Modules/indexeddb/IDBKeyRangeData.h:

        * WebCore.exp.in:

2014-02-01  Anders Carlsson  <andersca@apple.com>

        SVGTextLayoutAttributesBuilder shouldn't use RenderText::deprecatedCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=128048

        Reviewed by Sam Weinig.

        Change UChar*& lastCharacter to bool& lastCharacterWasSpace since that's what the parameter was used for.

        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        Initialize lastCharacterWasSpace to true to match the previous behavior.

        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForForSubtree):
        Ditto.

        (WebCore::processRenderSVGInlineText):
        Take a reference instead of a pointer, get the character using RenderText::operator[] and compute lastCharacterWasSpace.

        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        This now takes a bool reference instead.

        * rendering/svg/SVGTextLayoutAttributesBuilder.h:

2014-02-01  Brady Eidson  <beidson@apple.com>

        IDB: Index cursor complete advance() and iterate() support
        <rdar://problem/15941916> and https://bugs.webkit.org/show_bug.cgi?id=127870

        Reviewed by Dan Bernstein.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Always use the value buffer for the script object.

2014-02-01  Alexey Proskuryakov  <ap@apple.com>

        Update WebCrypto JWK mapping to use key_ops
        https://bugs.webkit.org/show_bug.cgi?id=127609

        Reviewed by Sam Weinig.

        Updated JWK support ot match current editor draft.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Fixed this previously untested function to actually work.
        (WebCore::tryJWKKeyOpsValue):
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable): Removed an old comment,
        these things are now specced.
        (WebCore::addToJSON): Made static functions file static, there is no reason for
        them to be class members.
        (WebCore::buildJSONForOctetSequence):
        (WebCore::buildJSONForRSAComponents):
        (WebCore::addBoolToJSON):
        (WebCore::addJWKAlgorithmToJSON):
        (WebCore::addUsagesToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        * bindings/js/JSCryptoKeySerializationJWK.h:

        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        Check for length, so that we don't fail silently.

2014-02-01  David Kilzer  <ddkilzer@apple.com>

        Add security-checked casts for all WebCore::CachedResource subclasses
        <http://webkit.org/b/127988>

        Reviewed by Darin Adler.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        - Switch from static_cast<>() to security-checked cast.

        * loader/cache/CachedCSSStyleSheet.h:
        (WebCore::toCachedCSSStyleSheet): Add.
        * loader/cache/CachedFont.h:
        (WebCore::toCachedFont): Add.

        * loader/cache/CachedImage.h: Make CachedImageManual final.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource): Add assert that
        only MainResource or RawResource types are used to construct a
        CachedRawResource.  This may be a security issue depending on
        what code exists that uses the type() value to cast to a
        CachedResource subclass.
        (WebCore::CachedRawResource::switchClientsToRevalidatedResource):
        Switch from static_cast<>() to toCachedRawResource().

        * loader/cache/CachedRawResource.h:
        (WebCore::toCachedRawResource): Add.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrRawResource): Add.  A
        CachedRawResource could be either a MainResource or a
        RawResource.  Currently only used in assertions.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        - Switch from static_cast<>() to security-checked cast.

        * loader/cache/CachedSVGDocument.h:
        (WebCore::toCachedSVGDocument): Add.
        * loader/cache/CachedScript.h:
        (WebCore::toCachedScript): Add.
        * loader/cache/CachedTextTrack.h:
        (WebCore::toCachedTextTrack): Add.
        * loader/cache/CachedXSLStyleSheet.h:
        (WebCore::toCachedXSLStyleSheet): Add.

2014-02-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fixed GTK+ CMake build after r162922.

        * PlatformGTK.cmake: Removed SoupURIUtils.cpp from the
        compilation.

2014-02-01  Benjamin Poulain  <bpoulain@apple.com>

        Improve the JavaScript bindings of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127971

        Reviewed by Sam Weinig.

        Instead of querying contains() followed by item(), just get the item
        at once in the custom binding.

        Test: fast/dom/dataset-name-getter-properties.html

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate):
        * dom/DOMStringMap.idl:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::item):
        * dom/DatasetDOMStringMap.h:

2014-01-31  Benjamin Poulain  <bpoulain@apple.com>

        Remove LEGACY_VIEWPORT_ADAPTION
        https://bugs.webkit.org/show_bug.cgi?id=128028

        Reviewed by Anders Carlsson.

        The code is incorrect and was only supported by Nix.

        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        * dom/ViewportArguments.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):

2014-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Release build fix after r163234. Don't always export the symbol that doesn't exist under NDEBUG.

        * WebCore.exp.in:

2014-01-31  Brady Eidson  <beidson@apple.com>

        IDB: Index cursors use wrong deserialization for the retrieved value
        https://bugs.webkit.org/show_bug.cgi?id=128035

        Reviewed by Dan Bernstein.

        For the cursor operations, add an IDBKey value result in the callbacks.
        If an already deserialized IDBKey value exists it will be preferred over the serialized buffer.

        Change some of the onSuccess() callback formats:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Selectively choose between the IDBKey or the SharedBuffer value
          when choosed what to convert to the ScriptValue.
        * Modules/indexeddb/IDBRequest.h:

        Let the IDBCursorBackend hold both a value buffer and a value key:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clear):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::valueBuffer):
        (WebCore::IDBCursorBackend::valueKey):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        Add IDBKey/IDBKeyData debug logging utilities:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::loggingString):
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

2014-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Debug build fix after r163232. Call hasEditableStyle() instead of isContentEditable() which
        can trigger a layout synchronously inside paintCaret. This matches the code before r163232.

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

2014-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Remove inline member functions of FrameSelection that access m_selection
        https://bugs.webkit.org/show_bug.cgi?id=127986

        Reviewed by Enrica Casucci.

        Removed numerous inline member functions of FrameSelection that depend on m_selection.

        This is needed to ensure all accesses to m_selection happen through FrameSelection::selection(),
        which in turn, allows us to update its call sites to use either validated selection that editing
        and rendering code uses or invalidated selection that's exposed to JavaScript.

        * WebCore.exp.in:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMRange move:inDirection:]):
        (-[DOMRange extend:inDirection:]):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/Editor.cpp:
        (WebCore::Editor::canEdit):
        (WebCore::Editor::canEditRichly):
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::paste):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::getCompositionSelection):
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::enabledInRichlyEditableText):
        (WebCore::enabledRangeInEditableText):
        (WebCore::enabledRangeInRichlyEditableText):
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::updateCaretRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::updateSelectionCachesIfSelectionIsInsideTextFormControl):
        (WebCore::FrameSelection::setFocusedElementIfNeeded):
        (WebCore::FrameSelection::currentForm):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::isCaretOrRange):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isInPasswordField):
        * editing/VisibleSelection.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages):
        (WebCore::Editor::readSelectionFromPasteboard):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::computeSelectionStart):
        (WebCore::HTMLTextFormControlElement::computeSelectionEnd):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::nodeIsNotBeingEdited):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::handleDrag):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::clearSelectionIfNeeded):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::caretRect):
        (WebCore::Frame::rectForScrollToVisible):
        (WebCore::Frame::styleAtSelectionStart):
        (WebCore::Frame::setRangedSelectionBaseToCurrentSelectionStart):
        (WebCore::Frame::setRangedSelectionBaseToCurrentSelectionEnd):
        (WebCore::Frame::setRangedSelectionInitialExtentToCurrentSelectionStart):
        (WebCore::Frame::setRangedSelectionInitialExtentToCurrentSelectionEnd):
        (WebCore::Frame::interpretationsForCurrentRoot):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2014-01-31  Simon Fraser  <simon.fraser@apple.com>

        Pass the viewport rect and scroll origin independently into the scrolling tree, and make things floats
        https://bugs.webkit.org/show_bug.cgi?id=128032

        Reviewed by Tim Horton.

        Pass the viewport rect and scroll offset independently into the ScrollingTree
        via the ScrollingStateScrollingNode, since on iOS the scroll offset doesn't
        always correspond to the viewport rect.
        
        Make the viewport rect and the scroll origin be float-based, since on
        Retina screens and with zooming these can both be non-integral.

        No behavior change.
        
        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setViewportConstrainedObjectRect):
        (WebCore::ScrollingStateScrollingNode::setScrollPosition):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollPosition):
        (WebCore::ScrollingTreeScrollingNode::viewportConstrainedObjectRect):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::parentScrollPositionDidChange):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::shrunkTo):

2014-01-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add NEFilterSource support to ContentFilterMac
        https://bugs.webkit.org/show_bug.cgi?id=127979

        Reviewed by Sam Weinig.

        Update ContentFilterMac to work with both WebFilterEvaluator and
        NEFilterSource, if enabled.

        * platform/ContentFilter.h: Set HAVE_NE_FILTER_SOURCE based on platform
        conditionals, and forward-declare NEFilterSource.
        * platform/mac/ContentFilterMac.mm: Included NEFilterSource.h if the SDK
        has it; declared the class directly if not. Also soft-linked
        NetworkExtension.framework.
        (WebCore::ContentFilter::ContentFilter): Initialized
        m_neFilterSourceStatus to NEFilterSourceStatusNeedsMoreData and created
        m_platformContentFilter and m_neFilterSource objects if their
        respective filters were enabled.
        (WebCore::ContentFilter::isEnabled): Returned true if either filter is
        enabled.
        (WebCore::ContentFilter::addData): Added incoming data to each filter
        that is enabled.
        (WebCore::ContentFilter::finishedAddingData): Notified each enabled
        filter that we are finished adding data.
        (WebCore::ContentFilter::needsMoreData): Returned true if either filter
        needs more data.
        (WebCore::ContentFilter::didBlockData): Returned true if either filter
        blocked data.
        (WebCore::ContentFilter::getReplacementData): Returned
        m_replacementData. Commented that this will currently return a null
        string if NEFilterSource blocked the load.

2014-01-31  Oliver Hunt  <oliver@apple.com>

        Rollout r163195 and related patches

        * CMakeLists.txt:
        * ForwardingHeaders/runtime/JSStringInlines.h: Removed.
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * bindings/js/JSIDBAnyCustom.cpp:
        * bindings/js/JSIDBDatabaseCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:

2014-01-31  Simon Fraser  <simon.fraser@apple.com>

        Even when in fixed layout mode, some platforms need to do layout after a viewport change
        https://bugs.webkit.org/show_bug.cgi?id=128003

        Reviewed by Andreas Kling.
        
        Re-land 163182 with a less aggresive check in visibleContentsResized() for
        needing to layout.

        iOS uses fixed layout mode in both WK1 and WK2, but lays out fixed position
        elements relative to a variable viewport. This code assumed that fixed layout
        implies a fixed viewport.
        
        Fix by testing for useCustomFixedPositionLayoutRect() in the fixed layout case.
        
        Also removed RenderView::hasCustomFixedPosition() which is no longer used.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldLayoutAfterViewportChange):
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2014-01-31  Alexey Proskuryakov  <ap@apple.com>

        Expose creation and modification times for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=128018

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export FileSystem functions to get file times.

2014-01-30  Maciej Stachowiak  <mjs@apple.com>

        Implement (most of) URL API
        https://bugs.webkit.org/show_bug.cgi?id=127795

        Reviewed by Alexey Proskuryakov.

        Tests: fast/dom/DOMURL/get-href-attribute-port.html
               fast/dom/DOMURL/invalid-url-getters.html
               fast/dom/DOMURL/set-href-attribute-hash.html
               fast/dom/DOMURL/set-href-attribute-host.html
               fast/dom/DOMURL/set-href-attribute-hostname.html
               fast/dom/DOMURL/set-href-attribute-pathname.html
               fast/dom/DOMURL/set-href-attribute-port.html
               fast/dom/DOMURL/set-href-attribute-protocol.html
               fast/dom/DOMURL/set-href-attribute-search.html
               fast/dom/DOMURL/set-href-attribute-whitespace.html
               fast/dom/DOMURL/url-constructor.html
               fast/dom/DOMURL/url-origin.html
               fast/dom/DOMURL/url-password.html
               fast/dom/DOMURL/url-username.html

        * CMakeLists.txt: Update for new IDL file.
        * DerivedSources.make: ditto
        * GNUmakefile.list.am: ditto
        * html/DOMURL.cpp: Implement URL() constructor and instance methods; cribbed from
        HTMLAnchorElement mostly
        (WebCore::DOMURL::DOMURL):
        (WebCore::DOMURL::href):
        (WebCore::DOMURL::setHref):
        (WebCore::DOMURL::toString):
        (WebCore::DOMURL::origin):
        (WebCore::DOMURL::protocol):
        (WebCore::DOMURL::setProtocol):
        (WebCore::DOMURL::username):
        (WebCore::DOMURL::setUsername):
        (WebCore::DOMURL::password):
        (WebCore::DOMURL::setPassword):
        (WebCore::DOMURL::host):
        (WebCore::parsePortFromStringPosition):
        (WebCore::DOMURL::setHost):
        (WebCore::DOMURL::hostname):
        (WebCore::DOMURL::setHostname):
        (WebCore::DOMURL::port):
        (WebCore::DOMURL::setPort):
        (WebCore::DOMURL::pathname):
        (WebCore::DOMURL::setPathname):
        (WebCore::DOMURL::search):
        (WebCore::DOMURL::setSearch):
        (WebCore::DOMURL::hash):
        (WebCore::DOMURL::setHash):
        * html/DOMURL.h:
        (WebCore::DOMURL::create):
        * html/DOMURL.idl: Update for new methods.
        * html/URLUtils.idl: Added. New IDL file that contains most of the interface.

2014-01-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Create clipping path from <box> value
        https://bugs.webkit.org/show_bug.cgi?id=126205

        Reviewed by Dirk Schulze.

        This implements <box> values for border, content, and padding boxes.
        Since margin box is not implemented as a reference box, this does not
        implement margin box value.

        Tests: css3/masking/clip-path-border-box.html
               css3/masking/clip-path-content-box.html
               css3/masking/clip-path-padding-box.html

        * rendering/ClipPathOperation.h:
        (WebCore::BoxClipPathOperation::pathForReferenceRect): Implement.
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox): Pull out reference box calculation.
        (WebCore::RenderLayer::setupClipPath): Add support for <box> values.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape): Add FIXME comment.

2014-01-29  Oliver Hunt  <oliver@apple.com>

        Make it possible to implement JS builtins in JS
        https://bugs.webkit.org/show_bug.cgi?id=127887

        Reviewed by Michael Saboff.

        Updating for the newly required headers.

        Test: js/regress/array-prototype-every.html

        * ForwardingHeaders/runtime/JSStringInlines.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * bindings/js/JSIDBAnyCustom.cpp:
        * bindings/js/JSIDBDatabaseCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor):

2014-01-31  Timothy Hatcher  <timothy@apple.com>

        Properly handle cases where a profile couldn't be recorded and null is returned.

        <rdar://problem/15957993> Crash with Inspector open at WebCore::ScriptProfile::buildInspectorObject

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCallFunction): Null check profile.
        (WebCore::InspectorTimelineAgent::didEvaluateScript): Ditto.

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Extended background should only create margin tiles for pages with background 
        images
        https://bugs.webkit.org/show_bug.cgi?id=127876
        -and corresponding-
        <rdar://problem/15827632>

        Reviewed by Simon Fraser.

        Settings::backgroundShouldExtendBeyondPage() doesn't need to create margin tiles
        for pages with simple background colors. Instead, those pages should achieve the 
        same effect by setting a background color on RenderLayerCompositor's
        m_layerForOverhangAreas. For now, we should only create tiles when there is a 
        background image. We may want to extend this to other types of complicated 
        backgrounds in the future.

        This patch makes callers that only care about the value of the setting always call 
        Settings::backgroundShouldExtendBeyondPage() rather than asking about margin 
        tiles. And callers that want to know about margin tiles can either keep querying 
        that directly or they can call FrameView::hasExtendedBackgroundRectForPainting(). 
        An extended background does not necessarily require an extended background rect 
        for painting, and this new FrameView function can make that distinction. 

        When setBackgroundExtendsBeyondPage() is called, call RenderLayerCompositor:: 
        setRootExtendedBackgroundColor() with either the document background color, or an 
        invalid color, depending on whether you have or do not have an extended 
        background. Also call needsExtendedBackgroundRectForPainting() to determine if we 
        also need to extend the background rect, and then call 
        setHasExtendedBackgroundRectForPainting() with its value.
        * page/FrameView.cpp:
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        (WebCore::FrameView::hasExtendedBackgroundRectForPainting):

         Right now we only need to extend the background rect for documents with 
        background images on the root. This may be extended in the future.
        (WebCore::FrameView::needsExtendedBackgroundRectForPainting):
        (WebCore::FrameView::setHasExtendedBackgroundRectForPainting):
        (WebCore::FrameView::extendedBackgroundRectForPainting):
        * page/FrameView.h:

        Expose defaultTileWidth and defaultTileHeight from TiledBacking.h so that we can 
        access the values from RenderLayerBacking.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.mm:

        hasExtendedBackgroundForPainting() is now called 
        hasExtendedBackgroundRectForPainting() to distinguish 
        the case where an extended RECT is needed.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        Call setHasExtendedBackgroundRectForPainting() if relevant.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

        Don't call setTiledBackingHasMargins() right in the constructor because we only
        want margins if we have a background image, and we won't have that information
        yet.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

        Clean up the variable name here. We are only setting margins when we need to 
        extend the background rect for painting. Also make us of newly-exposed 
        defaultTileWidth and Height.
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):

        Remove RenderLayerBacking::tiledBackingHasMargin() since there aren't any more
        callers.
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::usingTiledBacking):

        setMasksToBounds(false) based on the Setting, and not based on whether there are 
        tile margins.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

        Return false from RenderLayerCompositor::requiresContentShadowLayer() if there is 
        an extended background.
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):

        Setting the background color on m_layerForOverhangAreas is all we need to do to 
        create the extended background effect on pages that only have background colors. 
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

        Remove mainFrameBackingIsTiledWithMargin() since there aren't any more callers,
        and add setRootExtendedBackgroundColor() so that we can update the color from 
        RenderView.
        * rendering/RenderLayerCompositor.h:

        Revert the code that was added to paint background color here, since this should 
        all be covered by calling RenderLayerCompositor::setExtendedBackgroundColor(). 
        More complicated backgrounds will run through the full background painting code.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::backgroundRect):

2014-01-31  Jochen Eisinger  <jochen@chromium.org>

        Remove FrameLoader's reloadWithOverrideURL and reloadWithRequest
        https://bugs.webkit.org/show_bug.cgi?id=128005

        Reviewed by Darin Adler.

        The former was used by chromium-android to implement the "request
        desktop version" feature, but is no longer used. After removing it,
        the latter is only invoked by reload(), so we can merge the method
        with it.

        No new tests, just removing dead code.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        * loader/FrameLoader.h:

2014-01-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163182.
        http://trac.webkit.org/changeset/163182
        https://bugs.webkit.org/show_bug.cgi?id=128012

        Broke lots of tests (Requested by smfr on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::isFixedPositionInViewport):
        (WebCore::RenderView::hasCustomFixedPosition):
        * rendering/RenderView.h:

2014-01-31  Brady Eidson  <beidson@apple.com>

        IDB: openCursor() needs to prime the cursor with first position values
        https://bugs.webkit.org/show_bug.cgi?id=128008

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform): If the server connection returns initial keys/values
          for the cursor, store them.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-31  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape can fail
        https://bugs.webkit.org/show_bug.cgi?id=127588

        Reviewed by Dean Jackson.

        Correct the handling of image valued shapes that extend into or beyond the
        margin box. This can happen when object-fit causes one dimension of the shape
        to be greater than the corresponding margin box dimension.

        Made some simplifications in RasterShapeIntervals::computeShapeMarginIntervals()
        by making the shapeMargin parameter an int, removing some unnecessary variables.

        Revised the RasterShapeIntervals class. It's now a just a list of size() interval-lists,
        with valid indices: -offset() <= y < size() - offset(), or minY() to maxY(). If margin-top
        and shape-margin are specified, then offset() is the larger of shape-margin and margin-top.
        Similarly size() is the vertical size of the margin-box or the content-box expanded by
        shape-margin, whichever is larger. See computeShapeMarginIntervals().

        Tests: fast/shapes/shape-outside-floats/shape-outside-image-fit-005.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-006.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals):
        (WebCore::RasterShape::marginIntervals):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals):
        (WebCore::RasterShapeIntervals::offset):
        (WebCore::RasterShapeIntervals::minY):
        (WebCore::RasterShapeIntervals::maxY):
        (WebCore::RasterShapeIntervals::intervalsAt):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:

        (WebCore::getShapeImageReplacedRect):
        The rect that the image will be drawn into. This rect can imply image
        scaling and translation.

        (WebCore::getShapeImageMarginRect):
        The margin rect relative too the (0,0 origin) shape content rect.

        (WebCore::ShapeInfo<RenderType>::computedShape):

2014-01-31  Andreas Kling  <akling@apple.com>

        Deduplicate Document::encoding().
        <https://webkit.org/b/128000>

        Make Document::encoding() return an AtomicString so we don't duplicate
        the string every time it's called.

        215 KB progression on Membuster3.

        Reviewed by Simon Fraser.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::encoding):

2014-01-31  Simon Fraser  <simon.fraser@apple.com>

        Even when in fixed layout mode, some platforms need to do layout after a viewport change
        https://bugs.webkit.org/show_bug.cgi?id=128003

        Reviewed by Andreas Kling.

        iOS uses fixed layout mode in both WK1 and WK2, but lays out fixed position
        elements relative to a variable viewport. This code assumed that fixed layout
        implies a fixed viewport.
        
        Fix by testing for useCustomFixedPositionLayoutRect() in the fixed layout case.
        
        Also removed RenderView::hasCustomFixedPosition() which is no longer used.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldLayoutAfterViewportChange):
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2014-01-31  Zan Dobersek  <zdobersek@igalia.com>

        Guard GLContextEGL::platformContext() with USE(3D_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=120214

        Reviewed by Philippe Normand.

        Guard the GLContextEGL::platformContext() declaration and definiton with USE(3D_GRAPHICS)
        since this guard is used in the GLContext class, from which the GLContextEGL class overrides
        this method.

        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGL.h:

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Sideways 'wobble' when scrolling with trackpad on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=127521
        -and corresponding-
        <rdar://problem/14137306>

        Reviewed by Simon Fraser.

        This patch takes http://trac.webkit.org/changeset/154535 which introduced 
        filtering wheel events for overflow areas to try to make them less sensitive to X 
        deltas when scrolling in a primarily Y direction, and it factors that code out 
        into its own class, now called WheelEventDeltaTracker. So now this new class can 
        use the same code to filter events for WebKit2’s EventDispatcher.

        Files for WheelEventDeltaTracker.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        WK2 needs these new WheelEventDeltaTracker functions.
        * WebCore.exp.in:

        Move a bunch of code over to WheelEventDeltaTracker and use
        m_recentWheelEventTracker to serve the same purpose.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/EventHandler.h:

        Allow horizontal rubber banding now that we have some event filtering in place.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

        New files. Most of this code was from EventHandler.
        * page/WheelEventDeltaTracker.cpp: Added.
        (WebCore::WheelEventDeltaTracker::WheelEventDeltaTracker):
        (WebCore::WheelEventDeltaTracker::~WheelEventDeltaTracker):
        (WebCore::WheelEventDeltaTracker::beginTrackingDeltas):
        (WebCore::WheelEventDeltaTracker::endTrackingDeltas):
        (WebCore::WheelEventDeltaTracker::recordWheelEventDelta):
        (WebCore::deltaIsPredominantlyVertical):
        (WebCore::WheelEventDeltaTracker::dominantScrollGestureDirection):
        * page/WheelEventDeltaTracker.h: Added.
        (WebCore::WheelEventDeltaTracker::isTrackingDeltas):

        New function to clone events while zero-ing out certain deltas.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyIgnoringHorizontalDelta):
        (WebCore::PlatformWheelEvent::copyIgnoringVerticalDelta):

2014-01-31  Simon Fraser  <simon.fraser@apple.com>

        Don't do logging from Range::collectSelectionRects() on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127999

        Reviewed by Enrica Casucci.

        Remove some logging code that printed Range stuff in debug builds.

        * dom/Range.cpp:
        (WebCore::Range::collectSelectionRects):

2014-01-30  Simon Fraser  <simon.fraser@apple.com>

        Make iOS fixed layer registration more like OS X
        https://bugs.webkit.org/show_bug.cgi?id=127983

        Reviewed by Antti Koivisto.

        Remove some #if PLATFORM(IOS) in the code related to registering
        viewport-constrained layers. The code behaves correctly now in WK1
        and WK2 based on the presence of a ScrollingCoordinator.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::nearestScrollingCoordinatorAncestor):
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer):

2014-01-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163165.
        http://trac.webkit.org/changeset/163165
        https://bugs.webkit.org/show_bug.cgi?id=127997

        broke 2 fast/table tests (Requested by kling on #webkit).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::computePreferredLogicalWidths):

2014-01-31  Anders Carlsson  <andersca@apple.com>

        Don't allocate a new XMLHttpRequestStaticData every time staticData() is called
        https://bugs.webkit.org/show_bug.cgi?id=127996

        Reviewed by Andreas Kling.

        std::once_flag should be static.

        * xml/XMLHttpRequest.cpp:
        (WebCore::staticData):

2014-01-31  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Change RenderBoxModelObject's border functions' signature to support subpixel border painting.
        https://bugs.webkit.org/show_bug.cgi?id=127975

        Reviewed by Simon Fraser.

        From int to LayoutUnit.

        Covered by existing tests. No change in functionality.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderTop):
        (WebCore::RenderBoxModelObject::borderBottom):
        (WebCore::RenderBoxModelObject::borderLeft):
        (WebCore::RenderBoxModelObject::borderRight):
        (WebCore::RenderBoxModelObject::borderBefore):
        (WebCore::RenderBoxModelObject::borderAfter):
        (WebCore::RenderBoxModelObject::borderStart):
        (WebCore::RenderBoxModelObject::borderEnd):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::borderBefore):
        (WebCore::RenderTable::borderAfter):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        * rendering/RenderTableCell.h:

2014-01-31  Brady Eidson  <beidson@apple.com>

        IDB: Index writing
        <rdar://problem/15899973> and https://bugs.webkit.org/show_bug.cgi?id=127868

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openConnectionInternal): Remove outdated comment and ASSERT.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex): Conditionalize a block of code that is LevelDB-only.

        Remove getColumnBlob().  Nobody used it, and it was dangerous because it reset the statement:
        * platform/sql/SQLiteStatement.cpp:
        * platform/sql/SQLiteStatement.h:
        * WebCore.exp.in:

2014-01-30  László Langó  <lango@inf.u-szeged.hu>

        [CSS Grid Layout] Do log(n) search in the named line vectors when positioning named line spans.
        https://bugs.webkit.org/show_bug.cgi?id=125396

        Reviewed by Andreas Kling.

        Implement the suggested FIXMEs and do a log search in the named line
        vectors. This maintains the previous (somewhat tricky) behavior by
        using std::lower_bound and std::upper_bound. No difference in existing
        performance tests, but should scale much better for big grids.

        Backported from Blink:
        https://chromium.googlesource.com/chromium/blink/+/9fc477af0be708c490a6b90e65e412b0c22b161f

        No new tests, no behavior change.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::RenderGrid::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):

2014-01-31  László Langó  <lango@inf.u-szeged.hu>

        Fix table sizing when 'max-width' is used.
        https://bugs.webkit.org/show_bug.cgi?id=115156

        Reviewed by Andreas Kling.

        r143534 make <table> abide by 'max-width' all the time which is wrong.
        Per the CSS specification, a table should be wide enough to fit its
        content, regardless of 'max-width'.

        r140479 fixed part of the regression from that change but made the
        same fatal mistake by constraining min-content to fit 'max-width'.

        The fix is to avoid constraining min-content and ensure that the table
        logical width is at least its min-content size.

        Backported from Blink:
        https://chromium.googlesource.com/chromium/blink/+/0bca0dec4895aeeb2054ba36316e984e4ebed06f

        Test: fast/table/html-table-width-max-width-constrained.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::computePreferredLogicalWidths):

2014-01-30  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build after r163156.
        
        Need to convert LayoutSizes to FloatSizes.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode borderRadii]):

2014-01-30  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Change drawRect()/drawLine() signature to support subpixel rendering.
        https://bugs.webkit.org/show_bug.cgi?id=127961

        Reviewed by Simon Fraser.

        IntRect/IntPoint -> FloatRect/FloatPoint.

        Covered by existing tests. No change in functionality.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine): Keep 'distance' int for DottedStroke and DashedStroke for now.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):

2014-01-30  Simon Fraser  <simon.fraser@apple.com>

        Remove ScrollingCoordinator::setLayerIsContainerForFixedPositionLayers() which is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=127981

        Reviewed by Andreas Kling.

        setLayerIsContainerForFixedPositionLayers() was only used by Chromium and Blackberry,
        so remove it.
        
        This allows the removal of RenderLayerBacking::registerScrollingLayers(),
        moving the single useful line of code to the caller.

        * page/scrolling/ScrollingCoordinator.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2014-01-30  Simon Fraser  <simon.fraser@apple.com>

        Some fixed position elements disappear in WK2 on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127977

        Reviewed by Tim Horton.

        Use the appropriate rectangle to ensure that on iOS we don't 
        consider a fixed element outside the viewport when zoomed in,
        and therefore never make a compositing layer for it.

        Also remove the iOS-specific code in RenderLayerCompositor::requiresCompositingForPosition(),
        since it's OK to use the common code. Doing so requires that we
        set the "acceleratedCompositingForFixedPositionEnabled" setting to true
        for iOS, so do so.

        * page/Settings.cpp:
        * page/Settings.in:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2014-01-30  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make RoundedRect layout unit aware.
        https://bugs.webkit.org/show_bug.cgi?id=127779

        Reviewed by Simon Fraser.

        In order to draw hairline borders, RoundedRect needs to be
        LayoutUnit based.

        No change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::scale):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::inflateWithRadii):
        (WebCore::RoundedRect::RoundedRect):
        (WebCore::RoundedRect::intersectsQuad):
        * platform/graphics/RoundedRect.h:
        (WebCore::RoundedRect::Radii::Radii):
        (WebCore::RoundedRect::Radii::setTopLeft):
        (WebCore::RoundedRect::Radii::setTopRight):
        (WebCore::RoundedRect::Radii::setBottomLeft):
        (WebCore::RoundedRect::Radii::setBottomRight):
        (WebCore::RoundedRect::Radii::topLeft):
        (WebCore::RoundedRect::Radii::topRight):
        (WebCore::RoundedRect::Radii::bottomLeft):
        (WebCore::RoundedRect::Radii::bottomRight):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::Radii::shrink):
        (WebCore::RoundedRect::rect):
        (WebCore::RoundedRect::setRect):
        (WebCore::RoundedRect::move):
        (WebCore::RoundedRect::inflate):
        (WebCore::RoundedRect::expandRadii):
        (WebCore::RoundedRect::shrinkRadii):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::setCachedShadowValues):
        (WebCore::ScratchBuffer::setCachedInsetShadowValues):
        (WebCore::computeSliceSizesFromRadii):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::beginShadowLayer):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::fillRoundedRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateSideRect):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::calculateSideRectIncludingInner):
        (WebCore::calculateAdjustedInnerBorder):
        (WebCore::areaCastingShadowInHole):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=127959

        Reviewed by Anders Carlsson.

        * PlatformGTK.cmake: Use the new API version variable and don't use GTK3 directly.

2014-01-30  Jessie Berlin  <jberlin@apple.com>

        Speculative build fix.

        * page/animation/CSSPropertyAnimation.cpp:

2014-01-30  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Change BorderData's width from unsigned to float to enable subpixel border painting.
        https://bugs.webkit.org/show_bug.cgi?id=127949

        Reviewed by Andreas Kling.

        Covered by existing tests. No change in functionality.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::width):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::borderBeforeWidth):
        (WebCore::RenderStyle::borderAfterWidth):
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        * rendering/style/RenderStyle.h:

2014-01-30  David Kilzer  <ddkilzer@apple.com>

        Add security-checked cast for WebCore::CachedImage
        <http://webkit.org/b/127967>

        Reviewed by Darin Adler.

        * loader/cache/CachedImage.h:
        (WebCore::toCachedImage): Add.
        (WebCore::toCachedImageManual): Add.
        * loader/cache/CachedResource.h:
        (CACHED_RESOURCE_TYPE_CASTS): Add macro.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::switchClientsToRevalidatedResource):
        (WebCore::CachedImage::resumeAnimatingImagesForLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeImageFromCache):
        - Use toCachedImage() and toCachedImageManual().

2014-01-30  Simon Fraser  <simon.fraser@apple.com>

        Fixed position objects are clipped in iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=127974

        Reviewed by Darin Adler.
        
        We clip compositing layers for fixed position objects to the viewport
        to avoid huge layers. However, because iOS changes the fixed position
        rect when zooming, we need a different rect for iOS.
        
        In WK1 (when we have a platformWidget), we can use
        visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect)
        which is effectively the whole document. However in WK2 this is
        the real visibleContentRect(), so there we use unscaledDocumentRect().

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedExtentRect):
        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):

2014-01-28  Timothy Hatcher  <timothy@apple.com>

        Add column number and call timing support to LegacyProfiler.

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

        Reviewed by Joseph Pecoraro.

        * bindings/js/ScriptProfile.cpp:
        (WebCore::ScriptProfile::idleTime):
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObject):
        * bindings/js/ScriptProfile.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        * inspector/ScriptProfileNode.idl:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/protocol/Profiler.json:

2014-01-26  Timothy Hatcher  <timothy@apple.com>

        Include profile with FunctionCall and EvaluateScript Timeline records.

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

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCallInjectedScriptFunction):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCallFunctionImpl):
        (WebCore::InspectorInstrumentation::didEvaluateScriptImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/TimelineRecordFactory.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
        * inspector/WorkerInspectorController.h:

2014-01-30  Joseph Pecoraro  <pecoraro@apple.com>

        Remove now-empty ScriptController::setCaptureCallStackForUncaughtExceptions
        https://bugs.webkit.org/show_bug.cgi?id=127964

        Reviewed by Timothy Hatcher.

        Remove empty function. It was only needed by v8 at one point.

        * bindings/js/ScriptController.h:
        * bindings/js/ScriptController.cpp:
        Remove empty function.

        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        Remove callers and related tracking state.

2014-01-30  Roger Fong  <roger_fong@apple.com>

        WebGL load policy should be queried for the top level document.
        https://bugs.webkit.org/show_bug.cgi?id=127937.
        <rdar://problem/15950122>

        Reviewed by Timothy Horton.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2014-01-27  Jeffrey Pfau  <jpfau@apple.com>

        Add a method for schemes to be registered as supporting cache partitioning
        https://bugs.webkit.org/show_bug.cgi?id=127739

        Reviewed by Darin Adler.

        Currently, this assumes that schemes supporting cache partitioning
        also support (scheme, host) doubles for the scheme. Furthermore,
        the scheme is currently discarded when partitioning and is only
        checked to ensure that partitioning is supported for that scheme: it
        is assumed that all origins with the same host double should be binned
        together, regardless of scheme.

        * WebCore.exp.in:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::cachePartition):
        * platform/SchemeRegistry.cpp:
        (WebCore::CachePartitioningSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme):
        * platform/SchemeRegistry.h:

2014-01-30  Jer Noble  <jer.noble@apple.com>

        [iOS] Convert blocks to lambdas in iOS Fullscreen code.
        https://bugs.webkit.org/show_bug.cgi?id=127946

        Reviewed by Anders Carlsson.

        Pushing a block into a std::function will eventually cause a crash, since std::function
        does not know about Block_copy and Block_release.

        Lamdas can be intrinsicly converted to blocks, but not vice versa. Switch over all the
        blocks in the new iOS Fullscreen code to use lamdas, and use the ref-counted this object
        directly rather than implicitly.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add a "make dist" target
        https://bugs.webkit.org/show_bug.cgi?id=116378

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Don't build WebKitVersion.h for WebKitGTK+. We don't use it
        and we don't want to distribute the dependency.

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

        IDB: ObjectStore cursor advance() support
        <rdar://problem/15779645> and https://bugs.webkit.org/show_bug.cgi?id=127866

        Reviewed by Sam Weinig.

        Add IDBKeyData sorting for database collation:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::compare):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

        * platform/sql/SQLiteTransaction.h:
        (WebCore::SQLiteTransaction::database):

2014-01-30  David Kilzer  <ddkilzer@apple.com>

        De-virtual-ize CachedResource::isImage()
        <http://webkit.org/b/127936>

        Reviewed by Andreas Kling.

        Also replace explicit type() checks with isImage().

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): Use isImage().
        * loader/cache/CachedImage.h:
        (WebCore::CachedResource::isImage): Remove virtual override.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isImage): Check type() instead of
        defining a virtual method that returns false by default.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred): Use isImage().

2014-01-30  Eric Carlson  <eric.carlson@apple.com>

        [iOS] don't update media layers on main thread when using AVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=127931

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::mediaLayerMustBeUpdatedOnMainThread): Add mediaLayerMustBeUpdatedOnMainThread.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread): Ask the client if graphics layers
            should be updated on the main thread.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::mediaLayerMustBeUpdatedOnMainThread): New, check settings to see
            if video plug-in proxy is enabled.
        * rendering/RenderLayerBacking.h:

2014-01-30  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Fix a couple of UI bugs in the iOS Media Controls
        https://bugs.webkit.org/show_bug.cgi?id=127929

        Reviewed by Eric Carlson.

        Two UI bugs in the iOS Media Controls: the text in the controls should use the apple
        system font rather than the webkit small control font, and the buttons in the controls
        are clipped due to an "off by one" error when calculating the SVG image dimensions.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-time-remaining-display):

2014-01-30  Jeremy Jones  <jeremyj@apple.com>

        Refactor WebVideoFullscreenController separating AVKit from MediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=127762

        Reviewed by Jer Noble.

        Refactor WebVideoFullscreenControllerAVKit implementation into two abstract interfaces with concrete implementations: 
        WebVideoFullscreenModel, WebVideoFullscreenInterface, WebVideoFullscreenModelMediaElement, WebVideoFullscreenInterfaceAVKit.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterface.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenInterface::~WebVideoFullscreenInterface):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Added.
        (WebCore::WebVideoFullscreenInterfaceAVKit::~WebVideoFullscreenInterfaceAVKit):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Added.
        (NS_ENUM):
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController forwardingTargetForSelector:]):
        (-[WebAVPlayerController playerViewController:shouldDismissWithReason:]):
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController isPlaying]):
        (-[WebAVPlayerController setPlaying:]):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlaying]):
        (-[WebAVPlayerController seekToTime:]):
        (:m_videoFullscreenModel):
        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel):
        (WebVideoFullscreenInterfaceAVKit::setDuration):
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime):
        (WebVideoFullscreenInterfaceAVKit::setRate):
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions):
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        * platform/ios/WebVideoFullscreenModel.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenModel::~WebVideoFullscreenModel):
        * platform/ios/WebVideoFullscreenModelMediaElement.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenModelMediaElement::~WebVideoFullscreenModelMediaElement):
        (WebCore::WebVideoFullscreenModelMediaElement::setWebVideoFullscreenInterface):
        * platform/ios/WebVideoFullscreenModelMediaElement.mm: Added.
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        (WebVideoFullscreenModelMediaElement::handleEvent):
        (WebVideoFullscreenModelMediaElement::requestExitFullScreen):
        (WebVideoFullscreenModelMediaElement::play):
        (WebVideoFullscreenModelMediaElement::pause):
        (WebVideoFullscreenModelMediaElement::togglePlayState):
        (WebVideoFullscreenModelMediaElement::seekToTime):
        (WebVideoFullscreenModelMediaElement::didExitFullscreen):

2014-01-30  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Add a "start load" button.
        https://bugs.webkit.org/show_bug.cgi?id=127861

        Reviewed by Eric Carlson.

        Add a "start load" button which replaces the controls on platforms
        where inline playback is not allowed, or when playback without a
        user gesture is not allowed.

        Add an accessor to MediaControlsHost to query whether inline playback is allowed.:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaPlaybackAllowsInline):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaSession):

        Update the base controller to allow more functions to be overridden:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):
        (Controller.prototype.shouldHaveAnyUI):
        (Controller.prototype.updateBase):
        (Controller.prototype.setControlsType):
        (Controller.prototype.updateControls):
        (Controller.prototype.handleFullscreenChange):

        Add the new button, and allow for switching between "start", "inline", and "fullscreen" controls:
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.addVideoListeners):
        (ControllerIOS.prototype.removeVideoListeners):
        (ControllerIOS.prototype.createBase):
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton):
        (ControllerIOS.prototype.shouldHaveControls):
        (ControllerIOS.prototype.shouldHaveAnyUI):
        (ControllerIOS.prototype.createControls):
        (ControllerIOS.prototype.setControlsType):
        (ControllerIOS.prototype.addStartPlaybackControls):
        (ControllerIOS.prototype.removeStartPlaybackControls):
        (ControllerIOS.prototype.updateControls):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchStart):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchCancel):
        (ControllerIOS.prototype.handleReadyStateChange):

        Add the new art:
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-start-playback-button):
        (audio::-webkit-media-controls-start-playback-button.failed):

2014-01-30  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Swipe): Provide a way for clients to provide views to swipe
        https://bugs.webkit.org/show_bug.cgi?id=127891
        <rdar://problem/15931413>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        A surprising export.

2014-01-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=127371
        Explore new API that could be used to help build infinitely scrolling websites
        -and corresponding-
        <rdar://problem/15244768>

        Reviewed by Sam Weinig.

        This patch adds 4 new events called webkitwillrevealbottom, webkitwillrevealtop, 
        webkitwillrevealleft, and webkitwillrevealright. These events will fire when the 
        user has scrolled close to corresponding edge of the document. Right now that is 
        defined to be one viewport away from the corresponding edge. 

        FrameView::scrollPositionChanged() and 
        FrameView::scrollPositionChangedViaPlatformWidget() now take two parameters 
        representing the old scroll position and the new position.
        * WebCore.exp.in:

        New events.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::populateEventNameForAttributeLocalNameMap):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

        Send oldPosition and newPosition to scrollPositionChanged().
        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):

        After sending scroll events, also call sendWillRevealEdgeEventsIfNeeded() to send 
        the see if we should send the new will-reveal events.
        (WebCore::FrameView::scrollPositionChanged):

        Use the old position and the new position to determine if the events should be 
        sent.
        (WebCore::FrameView::sendWillRevealEdgeEventsIfNeeded):

        Send new parameters to scrollPositionChanged().
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::wheelEvent):
        * page/FrameView.h:

2014-01-30  Szabolcs David  <davidsz@inf.u-szeged.hu>

        [curl] Improve realm string parsing in WWW-Authenticate headers
        https://bugs.webkit.org/show_bug.cgi?id=127421

        Reviewed by Brent Fulgham.

        The realm string contains quotes at the beginning and end - this is the
        opposite of the libsoup implementation. Furthermore, if the header is
        concatenated from two or more another headers, it contains more incorrect part.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::removeLeadingAndTrailingQuotes):
        (WebCore::getProtectionSpace):

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Modernize HTTPHeaderMap iteration
        https://bugs.webkit.org/show_bug.cgi?id=127915

        Reviewed by Andreas Kling.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::InspectorResourceAgent::willLoadXHR):
        (WebCore::InspectorResourceAgent::replayXHR):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isSimpleCrossOriginAccessRequest):
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):

2014-01-30  Antti Koivisto  <antti@apple.com>

        WebPage::determinePrimarySnapshottedPlugIn is slow
        https://bugs.webkit.org/show_bug.cgi?id=127905

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: New exports
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement>): Add isElementOfType<>

2014-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        [SOUP] Fix the build if !ENABLE(WEB_TIMING)
        https://bugs.webkit.org/show_bug.cgi?id=127906

        Reviewed by Gustavo Noronha Silva.

        * platform/network/soup/SoupNetworkSession.cpp:

2014-01-30  Andrei Bucur  <abucur@adobe.com>

        Remove the ACCELERATED_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=127833

        Reviewed by Antti Koivisto.

        Remove the USE(ACCELERATED_COMPOSITING) conditionals from the code base and make AC
        mandatory.

        Tests: No new tests, no functional change.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::windowScreenDidChange):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        * history/PageCache.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::platformLayer):
        * html/canvas/WebGLRenderingContext.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed):
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        (WebCore::Frame::deviceOrPageScaleFactorChanged):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::scheduleLayerFlushAllowingThrottling):
        (WebCore::FrameView::hasCompositedContent):
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::hasCompositingAncestor):
        (WebCore::FrameView::enterCompositingMode):
        (WebCore::FrameView::isEnclosedInCompositingLayer):
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::isSoftwareRenderable):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::contentsInCompositedLayer):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::setIsOverlapped):
        (WebCore::FrameView::delegatesScrollingDidChange):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::visibleContentsResized):
        (WebCore::FrameView::addedOrRemovedScrollbar):
        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::setTracksRepaints):
        (WebCore::FrameView::resetTrackedRepaints):
        (WebCore::FrameView::setScrollingPerformanceLoggingEnabled):
        (WebCore::FrameView::setExposedRect):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        (WebCore::Page::setDeviceScaleFactor):
        * page/Settings.cpp:
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::supportsAcceleratedAnimationOfProperty):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::animationOfPropertyIsAccelerated):
        * page/animation/CSSPropertyAnimation.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        (WebCore::ImplicitAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::timeToNextService):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportOffsetChanged):
        (WebCore::Frame::containsTiledBackingLayers):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView):
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        (WebCore::ScrollingCoordinator::counterScrollingLayerForFrameView):
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
        * page/scrolling/ScrollingCoordinator.h:
        * platform/ScrollView.cpp:
        (WebCore::positionScrollCornerLayer):
        (WebCore::ScrollView::positionScrollbarLayers):
        (WebCore::ScrollView::paintScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::invalidateScrollbar):
        (WebCore::ScrollableArea::invalidateScrollCorner):
        (WebCore::ScrollableArea::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):
        * platform/ScrollableArea.h:
        * platform/ScrollbarTheme.h:
        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::applyFallbackCursor):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerAnimation.cpp:
        * platform/graphics/GraphicsLayerAnimation.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/GraphicsLayerUpdater.cpp:
        * platform/graphics/GraphicsLayerUpdater.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::platformLayer):
        (WebCore::MediaPlayer::supportsAcceleratedRendering):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::currentRenderingMode):
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::tearDownVideoRendering):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/LayerFlushScheduler.cpp:
        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/LayerFlushSchedulerClient.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::copyTimingFunctionsFrom):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::enumerateRectsBeingDrawn):
        * platform/graphics/ca/win/AbstractCACFLayerTreeHost.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/CACFLayerTreeHostClient.h:
        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        * platform/graphics/ca/win/LayerChangesFlusher.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::copyTimingFunctionsFrom):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawTile):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformLayer):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        * platform/graphics/gpu/TilingData.cpp:
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::supportsAcceleratedRendering):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::destroyQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::platformLayer):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateQTKit::layerHostChanged):
        (WebCore::MediaPlayerPrivateQTKit::acceleratedRenderingStateChanged):
        (-[WebCoreMovieObserver layerHostChanged:]):
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        * platform/graphics/mac/WebTiledLayer.h:
        * platform/graphics/mac/WebTiledLayer.mm:
        * platform/graphics/opengl/GLDefs.h:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/GLTransportSurface.cpp:
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        * platform/graphics/texmap/TextureMapperFPSCounter.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h:
        * platform/graphics/texmap/TextureMapperTile.cpp:
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformMedia):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::naturalSize):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint):
        (WebCore::CreateCGImageFromPixelBuffer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::currentRenderingMode):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::hasSetUpVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveAndResetMovieTransform):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::destroyLayerForMovie):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setPrivateBrowsingMode):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/WKCAImageQueue.cpp:
        * platform/graphics/win/WKCAImageQueue.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * plugins/PluginViewBase.h:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        * rendering/FlowThreadController.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::layersUseImage):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::suspendAnimations):
        (WebCore::RenderBoxModelObject::fixedBackgroundPaintsInLocalCoordinates):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference):
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::canRender3DTransforms):
        (WebCore::RenderLayer::paintsWithFilters):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive):
        (WebCore::RenderLayer::currentTransform):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::checkIfDescendantClippingContextNeedsUpdate):
        (WebCore::RenderLayer::shouldRepaintAfterLayout):
        (WebCore::RenderLayer::enclosingFilterRepaintLayer):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::clippingRootForPainting):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::invalidateScrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::shouldDoSoftwarePaint):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::collectsGraphicsLayersUnderRegions):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        (WebCore::RenderVideo::acceleratedRenderingStateChanged):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::repaintRootContents):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        (WebCore::RenderView::repaintViewAndCompositedLayers):
        (WebCore::RenderView::setMaximalOutlineSize):
        (WebCore::RenderView::compositor):
        (WebCore::RenderView::setIsInWindow):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::requiresAcceleratedCompositing):
        * rendering/RenderWidget.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):

2014-01-30  Krzysztof Czech  <k.czech@samsung.com>

        AX: Clean up AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=127838

        Reviewed by Chris Fleizach.

        Reducing some code by implementing ariaElementsFromAttribute.
        It is used as a helper for other methods.

        No new tests. Covered by existing ones.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaElementsFromAttribute):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        (WebCore::AccessibilityRenderObject::ariaDescribedByElements):
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        * accessibility/AccessibilityRenderObject.h:

2014-01-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163048.
        http://trac.webkit.org/changeset/163048
        https://bugs.webkit.org/show_bug.cgi?id=127890

        Caused many crashes, detected by EWS prior to landing
        (Requested by ap on #webkit).

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        (WebCore::MediaControlsHost::displayNameForTrack):
        (WebCore::MediaControlsHost::captionDisplayMode):
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::initUserStyle):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::registerForCaptionPreferencesChangedCallbacks):
        (WebCore::Document::captionPreferencesChanged):
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/DocumentStyleSheetCollection.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * page/CaptionStyleSheetMediaAF.cpp: Removed.
        * page/CaptionStyleSheetMediaAF.h: Removed.
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::CaptionUserPreferences):
        (WebCore::CaptionUserPreferences::notify):
        (WebCore::CaptionUserPreferences::setCaptionDisplayMode):
        (WebCore::CaptionUserPreferences::userPrefersCaptions):
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions):
        (WebCore::CaptionUserPreferences::userPrefersSubtitles):
        (WebCore::CaptionUserPreferences::setUserPrefersSubtitles):
        (WebCore::CaptionUserPreferences::userPrefersTextDescriptions):
        (WebCore::CaptionUserPreferences::setUserPrefersTextDescriptions):
        (WebCore::CaptionUserPreferences::captionPreferencesChanged):
        (WebCore::CaptionUserPreferences::textTrackSelectionScore):
        (WebCore::CaptionUserPreferences::setCaptionsStyleSheetOverride):
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride):
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::captionsStyleSheetOverride):
        (WebCore::CaptionUserPreferences::setInterestedInCaptionPreferenceChanges):
        (WebCore::CaptionUserPreferences::testingMode):
        (WebCore::CaptionUserPreferences::setTestingMode):
        (WebCore::CaptionUserPreferences::pageGroup):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):
        (WebCore::CaptionUserPreferencesMediaAF::userPrefersCaptions):
        (WebCore::CaptionUserPreferencesMediaAF::userPrefersSubtitles):
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        (WebCore::CaptionUserPreferencesMediaAF::captionPreferencesChanged):
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColor):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColorCSS):
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsEdgeColorForTextColor):
        (WebCore::CaptionUserPreferencesMediaAF::cssPropertyWithTextEdgeColor):
        (WebCore::CaptionUserPreferencesMediaAF::colorPropertyCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride):
        (WebCore::CaptionUserPreferencesMediaAF::textTrackSelectionScore):
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Page.cpp:
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged):
        (WebCore::PageGroup::captionPreferences):
        * page/PageGroup.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):

2014-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(JAVASCRIPT_DEBUGGER) leftovers
        https://bugs.webkit.org/show_bug.cgi?id=127845

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):

2014-01-29  Gavin Barraclough  <barraclough@apple.com>

        Add IsVisibleOrOccluded to ViewState
        https://bugs.webkit.org/show_bug.cgi?id=127875

        Reviewed by Anders Carlsson.

        * page/ViewState.h:
            - added IsVisibleOrOccluded

2014-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        EventHandler::handleMouseReleaseEvent shouldn't call updateSelectionCachesIfSelectionIsInsideTextFormControl
        and selectFrameElementInParentIfFullySelected
        https://bugs.webkit.org/show_bug.cgi?id=127834

        Reviewed by Alexey Proskuryakov.

        Removed the calls and made setNonDirectionalSelectionIfNeeded pass in UserTriggered option.

        In addition, removed the rather error-prone function override of setSelection since TextGranularity,
        which is an enum, could be implicitly coerced into SetSelectionOptions which is a typedefed unsigned int.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent): Renamed from setNonDirectionalSelectionIfNeeded.
        Pass in DoNotRevealSelection to avoid revealing the selection to preserve the existing behavior.
        There are two layout tests that fail without this.
        (WebCore::FrameSelection::setSelection): Check the newly addeed DoNotRevealSelection option.
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection): Call

        * editing/FrameSelection.h: Made updateSelectionCachesIfSelectionIsInsideTextFormControl and
        selectFrameElementInParentIfFullySelected private as they are no longer called outside of FrameSelection.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent): Removed calls to the functions.

2014-01-29  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix after 163050.

        Import CALayer.h explicitly as (on iOS) it is not included by other headers.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-29  Jer Noble  <jer.noble@apple.com>

        Unreviewed Mac Build fix after r163046.

        Forward define AVSampleLayerDisplayLayer and its methods.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-26  Sam Weinig  <sam@webkit.org>

        CaptionUserPreferences should not be on the PageGroup if they are not really per-PageGroup (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=127666

        Reviewed by Eric Carlson.

        This patch:
        - Makes CaptionUserPreferences a singleton (temporary) that is accessed
          via Page.
        - Simplifies overriding system preferences by requiring that a Document be
          be passed so the correct Settings object can be obtained (and not just a 
          random one).
        - Stops using UserStyleSheets for captions style injection, and instead
          adds a new style sheet to the DocumentStyleSheetCollection.
        - Move caption style sheet creation into its own file - CaptionStyleSheetMediaAF.h/cpp

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * WebCore.exp.in:
        Update exports.

        * css/DocumentRuleSets.cpp:
        * css/InspectorCSSOMWrappers.cpp:
        * dom/Document.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/DocumentStyleSheetCollection.h:
        Switch from using the user style sheet mechanism, which is meant for, you guessed it, users,
        to an explicit caption style sheet.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        * html/HTMLMediaElement.cpp:
        * html/shadow/MediaControlElements.cpp:
        Get the CaptionUserPreferences via the Page.

        * page/CaptionStyleSheetMediaAF.cpp: Added.
        * page/CaptionStyleSheetMediaAF.h: Added.
        Move caption style sheet creation here. If the global style changes, the sheet is invalidated
        and this is called again.

        * page/CaptionUserPreferences.cpp:
        * page/CaptionUserPreferences.h:
        - Removes unused m_havePreferences member.
        - Change userPrefersFoo() functions to take a Document&. Use it to check its Settings.
        - Remove setUserPrefersFoo() functions and just set the Settings directly.
        - Move all the testing only pieces together.
        
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/CaptionUserPreferencesMediaAF.h:
        - Extract caption style sheet creation into CaptionStyleSheetMediaAF.h/cpp
        - Stop waiting for an interested party, and just register for appearance change
          notifications right away. Media elements are common enough that this should not
          make a difference.

        * page/Page.cpp:
        (WebCore::Page::updateStyleForAllPagesForCaptionPreferencesChanged):
        Add helper to call captionPreferencesChanged() on all the Pages.

        (WebCore::Page::captionPreferences):
        Add accessor for the CaptionUserPreferences. Currently this returns a singleton, but I plan
        to extract the singleton aspects of it into another class, and leave the per-Page parts here.

        * page/Page.h:
        * page/PageGroup.cpp:
        * page/PageGroup.h:
        Remove CaptionUserPreferences from here.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        Override the settings for the page directly.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):
        Get the CaptionUserPreferences via the Page.

2014-01-29  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] In SourceBufferPrivateAVFObjC, only include those headers actually necessary to compile.
        https://bugs.webkit.org/show_bug.cgi?id=127846

        Reviewed by Darin Adler.

        To work around a compile issue, only include those paths containing classes and typedefs
        which are used within SourceBufferPrivateAVFObjC, rather than all of AVFoundation.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-29  Brady Eidson  <beidson@apple.com>

        IDB: Fully implement IDBKeyData encoding/decoding
        https://bugs.webkit.org/show_bug.cgi?id=127863

        Rubberstamped by Alexey Proskuryakov.

        * platform/KeyedCoding.h:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):

        * WebCore.exp.in:

2014-01-29  Bem Jones-Bey  <bjonesbe@adobe.com>

        clip-path swaps bottom radii for the inset shape
        https://bugs.webkit.org/show_bug.cgi?id=127859

        Reviewed by Dirk Schulze.

        The bottom right and bottom left radii were passed in the wrong order,
        causing the wrong corner to be clipped in the resultant rendering.

        Test: css3/masking/clip-path-inset-corners.html

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Change the parameter order to be
        correct.

2014-01-29  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Hook up the fullscreen button
        https://bugs.webkit.org/show_bug.cgi?id=127850

        Reviewed by Eric Carlson.

        For the fullscreen button, do the same thing we do for the play button: handle touchstart,
        touchend, and touchcancel, and perform the action (i.e., 'click') on touchend.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Add listeners for the fullscreenButton.
        (ControllerIOS.prototype.isFullScreen): Override.
        (ControllerIOS.prototype.handleFullscreenButtonClicked): Override.
        (ControllerIOS.prototype.handleFullscreenTouchStart): Added.
        (ControllerIOS.prototype.handleFullscreenTouchEnd): Added.
        (ControllerIOS.prototype.handleFullscreenTouchCancel): Added.

2014-01-29  Brady Eidson  <beidson@apple.com>

        IDB: Opening an existing database is broken
        https://bugs.webkit.org/show_bug.cgi?id=127851

        Reviewed by Tim Hatcher.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::didOpenInternalAsync): Remember if this method has completed.
        (WebCore::IDBDatabaseBackend::processPendingCalls): If didOpenInternalAsync hasn’t
          been called yet, then it is incorrect to process any pending calls right now.
        * Modules/indexeddb/IDBDatabaseBackend.h:

2014-01-29  Oliver Hunt  <oliver@apple.com>

        This dereference should not actually be necessary, and
        is producing deprecation warnings with newer perls

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributesHashTable):

2014-01-28  Oliver Hunt  <oliver@apple.com>

        Make DOM attributes appear to be faux accessor properties
        https://bugs.webkit.org/show_bug.cgi?id=127797

        Reviewed by Michael Saboff.

        Refactor the bindings generator, and make sure we emit
        the CustomAccessor flag on properties that should 
        appear to be accessors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

2014-01-29  Alex Christensen  <achristensen@webkit.org>

        Prepare for accelerated compositing on WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=127843

        Reviewed by Anders Carlsson.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::setupFormData):
        Remove VS2005 warning workaround.
        * WebCore.vcxproj/WebCore.vcxproj:
        Remove StyleCachedImageSet.cpp and CSSImageSetValue.cpp from the Win64 build
        to avoid warnings because they are also included in StyleAllInOne.cpp and
        CSSAllInOne.cpp, respectively.

2014-01-28  Michael Saboff  <msaboff@apple.com>

        Merge the jsCStack branch
        https://bugs.webkit.org/show_bug.cgi?id=127763

        Reviewed by Mark Hahnenberg.

        Changes from http://svn.webkit.org/repository/webkit/branches/jsCStack
        up to changeset 162958.

2014-01-29  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        * bindings/js/JSDOMWindowCustom.cpp: Updated for header renames.

2014-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(JAVASCRIPT_DEBUGGER) guards
        https://bugs.webkit.org/show_bug.cgi?id=127840

        Reviewed by Mark Lam.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptProfile.cpp:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfileNode.h:
        * bindings/js/ScriptProfiler.cpp:
        * bindings/js/ScriptProfiler.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::resume):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::isDebuggerPausedImpl):
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSPImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * inspector/WebDebuggerAgent.cpp:
        * inspector/WebDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::resume):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::pauseWorkerGlobalScope):
        * inspector/WorkerRuntimeAgent.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * page/Console.cpp:
        * page/Console.h:
        * page/Console.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::connectToWorkerGlobalScopeInspectorTask):
        (WebCore::WorkerMessagingProxy::connectToInspector):
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
        (WebCore::dispatchOnInspectorBackendTask):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):

2014-01-29  Eric Carlson  <eric.carlson@apple.com>

        [iOS] cleanup MediaPlayer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127821

        Reviewed by Jer Noble.

        Don't register MediaPlayerPrivateIOS unless the runtime setting for media player proxy is set.

        * platform/graphics/MediaPlayer.cpp: Don't define PlatformMediaEngineClassName on iOS
        (WebCore::installedMediaEngines): Drive by cleanup to return early if registration has
            already happened.
        (WebCore::MediaPlayer::MediaPlayer): Don't force-register the first media engine unless 
            isVideoPluginProxyEnabled returns true.

2014-01-29  Youenn Fablet  <youennf@gmail.com>

        Have XHR.getResponseHeader() return null and XHR.getAllResponseHeader() return the empty string in initial ready states
        https://bugs.webkit.org/show_bug.cgi?id=125840

        Reviewed by Alexey Proskuryakov.

        Merging https://chromium.googlesource.com/chromium/blink/+/d201caf874a0bd6f101f517462b3cf1d8c5fce3d
        This patch makes it clear that null/empty string is returned whenever the error flag is set.
        This new code path is covered by the added test.
        
        Test: http/tests/xmlhttprequest/response-access-on-error.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2014-01-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (r162947): Repaint test results are different between WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=127814

        Reviewed by Anders Carlsson.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        
            Move repaint rect logging to RenderView.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        
            Record raw repaint rects instead of optimized ones.

2014-01-29  Brady Eidson  <beidson@apple.com>

        IDB: Serialize IDBKeyDatas to disk, not IDBKeys
        https://bugs.webkit.org/show_bug.cgi?id=127829

        Reviewed by Tim Horton.

        Move encode/decode from IDBKey to IDBKeyData.

        * Modules/indexeddb/IDBKey.cpp:
        * Modules/indexeddb/IDBKey.h:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

2014-01-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (r162947): css3/flexbox/multiline-justify-content.html and css3/flexbox/position-absolute-child.html are timing out
        https://bugs.webkit.org/show_bug.cgi?id=127809

        Reviewed by Anders Carlsson.

        These tests generate very large number of small repaint rectangles that overwhelm the region code.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/graphics/Region.h:
        (WebCore::Region::gridSize):
        (WebCore::Region::Shape::gridSize):
        
            Add accessor for getting the current region grid complexity.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        
            If the region gets very complex merge the repaint rects into a single big rectangle.

2014-01-29  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Unable to scroll a scrollable container for regions using mouse wheel
        https://bugs.webkit.org/show_bug.cgi?id=123886

        When an element flowed into a scrollable region is scrolled using the mouse wheel, the event 
        needs to be propagated to the region containing that element, on top of which the cursor
        is located.

        Reviewed by Antti Koivisto.

        Tests: fast/regions/wheel-scroll-abspos.html
               fast/regions/wheel-scroll.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::scrollWithWheelEventLocation):
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionFromAbsolutePointAndBox):
        * rendering/RenderFlowThread.h:

2014-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r162922): [SOUP] Several tests are failing in EFL and GTK+ after r162922
        https://bugs.webkit.org/show_bug.cgi?id=127836

        Reviewed by Gustavo Noronha Silva.

        The problem is that I assumed that several things done in
        ResourceRequest::soupURI() were always desired, so I moved them to
        URL. This patch restores the previous behaviour, so that those
        tings are only done right before making a request.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::createSoupURI):
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::createSoupURI):

2014-01-29  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-describedby with ATK_RELATION_DESCRIBED_BY
        https://bugs.webkit.org/show_bug.cgi?id=121684

        Reviewed by Mario Sanchez Prada.

        Exposed aria-describedby by ATK_RELATION_DESCRIBED_BY.
        Moved elementsFromAttribut to AccessibilityObject to have common interface
        for AccessibilityNodeObject and AccessibilityRenderObject. Implemented
        supportsARIADescribedBy and ariaDescribedByElements to better deal with aria-describedby attribute.

        No new tests. Covered by existed one.

        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementsFromAttribute):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIADescribedBy):
        (WebCore::AccessibilityObject::ariaDescribedByElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIADescribedBy):
        (WebCore::AccessibilityRenderObject::ariaDescribedByElements):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2014-01-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] minmax() should be a CSSFunction instead of a CSSValueList
        https://bugs.webkit.org/show_bug.cgi?id=127057

        Reviewed by Antti Koivisto.

        We were incorrectly dumping minmax(x,y) as "x y" instead of
        "minmax(x,y)". That's because we were treating minmax() internally
        as a CSSValueList instead of a CSSFunction. Replaced that and also
        added some extra information to our tests in order to check that
        we don't regress. From now on the CSS grid layout testing helper
        functions print not only the computed style but also the contents
        of element.style.webkitGridDefinition{Columns|Rows}.

        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::arguments):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackSize):

2014-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Rename notifyRendererOfSelectionChange
        https://bugs.webkit.org/show_bug.cgi?id=127831

        Reviewed by Antti Koivisto.

        Renamed notifyRendererOfSelectionChange to updateSelectionCachesIfSelectionIsInsideTextFormControl.

        * WebCore.order: Removed the exported symbol name as it's not used in WebKit or WebKit2 code.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::updateSelectionCachesIfSelectionIsInsideTextFormControl): Don't update the style since the existence
        of text form control's shadow DOM no longer depends on renderer.
        * editing/FrameSelection.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selectionChanged): Don't check renderer() for the same reason.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2014-01-28  Jer Noble  <jer.noble@apple.com>

        [Mac] Handle NSURLAuthenticationMethodServerTrust challenges from -resourceLoader:shouldWaitForResponseToAuthenticationChallenge:
        https://bugs.webkit.org/show_bug.cgi?id=127806

        Reviewed by Eric Carlson.

        In addition to the normal "user/password" NSURLAuthenticationChallenges, the 
        -resourceLoader:shouldWaitForResponseToAuthenticationChallenge: delegate method will
        ask us to confirm server certificate chains. Rather than pop up an authentication
        dialog (which won't work anyway) we will now just drop such requests and continue
        on normally.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):

2014-01-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162987.
        http://trac.webkit.org/changeset/162987
        https://bugs.webkit.org/show_bug.cgi?id=127825

        Broke Mountain Lion build (Requested by andersca on #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):

2014-01-28  Enrica Casucci  <enrica@apple.com>

        Add support for ActionSheets in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127586
        <rdar://problem/15283667>

        Reviewed by Benjamin Poulain.

        This patch contains some WebCore changes required to
        implement support for ActionSheets.
        It adds copyURL implementation for iOS in the Editor
        class and fixes some bugs in the iOS specific pasteboard
        writing code.
        The changes to Localizable.strings are the result of
        running update-webkit-localizedstrings script.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2014-01-28  Andy Estes  <aestes@apple.com>

        [iOS] REGRESSION (r162663): Webpages have strange artifacts or corruption around tile boundaries
        https://bugs.webkit.org/show_bug.cgi?id=127823

        Reviewed by Daniel Bates.

        Original patch by Simon Fraser.

        * platform/ScrollView.cpp: Specify LegacyIOSDocumentViewRect when calling visibleContentRect().

2014-01-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Adjust inset sizing syntax to the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=127785

        Reviewed by Bem Jones-Bey.

        According to the latest CSS Shapes specification [1], the width arguments of inset should
        follow the syntax of the margin shorthand, which let us set all four insets with one, two
        or four values. This patch updates the behavior and updates the affected tests.

        [1] http://dev.w3.org/csswg/css-shapes/#funcdef-inset

        Existing tests have been updated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseInsetRoundedCorners):
        (WebCore::CSSParser::parseBasicShapeInset):

2014-01-28  Oliver Hunt  <oliver@apple.com>

        Make DOM attributes appear to be faux accessor properties
        https://bugs.webkit.org/show_bug.cgi?id=127797

        Reviewed by Michael Saboff.

        Refactor the bindings generator, and make sure we emit
        the CustomAccessor flag on properties that should 
        appear to be accessors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

2014-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Support @scope in HTML tables
        https://bugs.webkit.org/show_bug.cgi?id=127688

        Reviewed by Mario Sanchez Prada.

        Add support for scope attribute so that row headers and column headers
        are now exposed at the table cell level where appropriate.

        Test: platform/mac/accessibility/table-scope.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::parentTable):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::isTableHeaderCell):
        (WebCore::AccessibilityTableCell::isTableCellInSameRowGroup):
        (WebCore::AccessibilityTableCell::isTableCellInSameColGroup):
        (WebCore::AccessibilityTableCell::columnHeaders):
        (WebCore::AccessibilityTableCell::rowHeaders):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-01-28  Brent Fulgham  <bfulgham@apple.com>

        Improve latching behavior for wheel events
        https://bugs.webkit.org/show_bug.cgi?id=127386
        <rdar://problem/12176858>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::clearLatchedNode): Added
        (WebCore::ScrollingTree::latchedNode): Added
        (WebCore::ScrollingTree::removeDestroyedNodes): Clear latched node if it's being removed.
        (WebCore::ScrollingTree::ScrollingTree): Initialize new value used for tracking
        scroll latching state.
        (WebCore::ScrollingTree::setLatchedNode): Added
        (WebCore::ScrollingTree::setOrClearLatchedNode): Added
        Set latched node when beginning a swipe event, or clear latched node when scroll/momentum ends.
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Check for an existing
        latched node and stay in fast scrolling mode if possible. If the current event should
        start a swipe event, clear the current latched node so we can correctly find and assign
        the new latch node.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode): Added
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent): Determine latching state
        based on wheel event state and position of mouse pointer in the document.
        * platform/ScrollAnimator.cpp:
        (ScrollAnimator::handleWheelEvent): Always treat PlatformWheelEventPhaseMayBegin
        as successfully handled so that it does not "bubble back up" to the root of
        the scrolling tree.   

2014-01-23  Myles C. Maxfield  <mmaxfield@apple.com>

        ASSERT_WITH_SECURITY_IMPLICATION in WebCore::InlineTextBox::paint
        https://bugs.webkit.org/show_bug.cgi?id=114586

        Reviewed by Dave Hyatt.

        Taken mostly from https://chromium.googlesource.com/chromium/blink/+/cb2297db16f2e9328cb4dd8b552093d6b22340a8

        If RenderQuote is a subclass of RenderObject, it can't be split by the first-letter CSS pseudoclass.
        Instead, we should make it a subclass of RenderElement, so that it can be split properly.

        Test: fast/css-generated-content/quote-first-letter.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::willBeDestroyed):
        (WebCore::RenderQuote::willBeRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateText):
        (WebCore::RenderQuote::computeText):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderQuote.h:
        * rendering/style/ContentData.cpp:
        (WebCore::QuoteContentData::createContentRenderer):

2014-01-28  Antti Koivisto  <antti@apple.com>

        Document::topDocument() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=127786

        Reviewed by Darin Adler.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame):
        (WebCore::AccessibilityObject::topDocument):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityContainer]):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::destroyRenderTree):
        (WebCore::Document::clearAXObjectCache):
        (WebCore::Document::existingAXObjectCache):
        (WebCore::Document::axObjectCache):
        (WebCore::Document::implicitClose):
        (WebCore::Document::topDocument):
        (WebCore::Document::topOrigin):
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::incrementScrollEventListenersCount):
        (WebCore::DOMWindow::decrementScrollEventListenersCount):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isReplacementObscured):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        
2014-01-28  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        Sticky positioning is broken for table rows
        https://bugs.webkit.org/show_bug.cgi?id=112024

        Reviewed by Simon Fraser.

        Enable sticky positioning for table elements. 
        Also includes fix for bug ​wkb.ug/105654
        I don't have access to this bug, but from related commit message I 
        assume it says about "Heap use after free problem".
        Debugging showed that it wasn't heap use after free. 
        The real problem that RenderObject::container() returns object which is
        not RenderBlock and it is used as RenderBlock in 
        RenderBox::containingBlockLogicalHeightForPositioned() method.
        Added extra isRenderBlock check and search for containingBlock if 
        current block is not RenderBlock.
        
        Tests: fast/css/sticky/sticky-table-row-top.html
               fast/css/sticky/sticky-table-thead-top.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderTableRow.h:

2014-01-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Fixing several incorrect assumptions with handling isolated inlines.
        https://bugs.webkit.org/show_bug.cgi?id=127608

        Reviewed by Simon Fraser.

        Fixing capitalization.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setUpResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):

2014-01-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Fixing several incorrect assumptions with handling isolated inlines.
        https://bugs.webkit.org/show_bug.cgi?id=127608

        Reviewed by Dave Hyatt.

        First, when an isolated inline spans multiple lines, we aren't guaranteed
        to exit BidiResolver with a nested inline count of zero. Removing the
        assert that says otherwise.
        
        Previously in constructBidiRunsForSegment, we called bidiFirst in
        an attempt to properly setup the isolatedResolver for any dom/style
        that applied, but this only worked on the first line the isolated
        inline appeared in. Adding a function that approaches this properly
        by recursing through the parents of the starting object for the line
        and post-fixing direction attributes to the resolver.
        
        Finally, addressing an issue where the line following a removed isolated
        inline (with a continuation) failed to be marked dirty.

        Merged from Blink: https://chromium.googlesource.com/chromium/blink/+/72698f203b1c50900e535b80945563b92b7eef23

        Tests: fast/text/nested-bidi-assert.html
               fast/text/nested-bidi-with-continuation-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::Run>::~BidiResolver):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setupResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2014-01-28  Antti Koivisto  <antti@apple.com>

        REGRESSION(r162837): 5% regression on html5-full-render and 3% regression in DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=127722

        Reviewed by Darin Adler.

        Accumulate repaint region in RendeView instead of flushing rects directly to the system.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateLayout):
        (WebCore::Document::topDocument):
        
            Make less silly.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        (WebCore::RenderView::flushAccumulatedRepaintRegion):
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        (WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
        * rendering/RenderView.h:

2014-01-28  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement::m_platformLayerBorrowed is uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=127759

        Reviewed by Eric Carlson.

        Initalize m_platformLayerBorrowed to false.

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

2014-01-28  Jer Noble  <jer.noble@apple.com>

        [Mac] Use explicit, rather than canonical, AudioFormatFlags and types.
        https://bugs.webkit.org/show_bug.cgi?id=127781

        Reviewed by Eric Carlson.

        Since every mac platform uses Float32 audio samples, use these types explicitly
        rather than the implicit, canonical AudioSampleType type. Once we're using Float32
        explicity, we can also use the explicit kAudioFormatFlagsNativeFloatPacked flag
        rather than the canonical version.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::configure):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2014-01-27  Alexey Proskuryakov  <ap@apple.com>

        Expose SQL database creation and modification times
        https://bugs.webkit.org/show_bug.cgi?id=127728

        Reviewed by Brady Eidson.

        * platform/FileSystem.h:
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileCreationTime):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileCreationTimeFromFindData):
        (WebCore::getFileCreationTime):
        Added functions to get file creation times. Not all OSes support that, but Darwin
        and Windows do, as (I think) various BSD flavors.

        * platform/gtk/FileSystemGtk.cpp: Added a stub for getFileCreationTime().

        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::databaseCreationTime):
        (WebCore::SQLiteFileSystem::databaseModificationTime):
        Expose it in the same strange manner other database file operations are.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::creationTime):
        (WebCore::DatabaseDetails::modificationTime):
        Added creation and modification times to DatabaseDetails.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::openDatabaseBackend):
        ProposedDatabase is an unfortunate mechanism for communicating quota errors to the
        client, we should really straighten it up. But for now, just leave the times uninitialized.

        * Modules/webdatabase/DatabaseBackendBase.cpp: (WebCore::DatabaseBackendBase::details):
        This code path is for handling quota errors, so there is no need to initialize most
        of DatabaseDetails here as well.

        * Modules/webdatabase/DatabaseTracker.cpp: (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseTracker.h:
        Fill in database file times. Inlined and removed usageForDatabase function to
        avoid rebuilding the path multiple times.

2014-01-28  Jer Noble  <jer.noble@apple.com>

        Setting muted attribute on <video> element is not reflected in controls
        https://bugs.webkit.org/show_bug.cgi?id=127726

        Reviewed by Eric Carlson.

        If the 'muted' IDL attribute is queried after the 'muted' and 'src' content attributes are
        set but before loading begins, it will return 'false' until loading begins, but with no
        way to query whether that value is valid, nor firing a volumechange event when its value
        changes.

        The HTML spec says that the 'muted' content attribute controls whether audio output is
        muted "when the media element is created", not when loading begins, but we don't
        necessarily have a signal that the element is fully parsed.  Additionally, this means its
        impossible to make an element via script and get this behavior.

        So the new behavior is that the 'muted' IDL attribute will always reflect the 'muted'
        content attribute up until one of the following three conditions:

        - The 'muted' IDL attribute is set via script.
        - The element is inserted in the document.
        - The element begins loading.

        After the first one of the above conditions, the 'muted' IDL attribute will no longer
        change when the 'muted' content attribute changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:

2014-01-28  Anders Carlsson  <andersca@apple.com>

        Add stubbed out VisitedLinkProvider class
        https://bugs.webkit.org/show_bug.cgi?id=127744

        Reviewed by Andreas Kling.

        This is a first step towards moving responsibility of visited links from 
        the page group to a separate object.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        * page/PageGroup.h:
        (WebCore::PageGroup::visitedLinkProvider):
        * page/VisitedLinkProvider.cpp: Added.
        (WebCore::VisitedLinkProvider::VisitedLinkProvider):
        (WebCore::VisitedLinkProvider::~VisitedLinkProvider):
        * page/VisitedLinkProvider.h: Added.
        (WebCore::VisitedLinkProvider::create):

2014-01-28  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Add support for menclose element
        https://bugs.webkit.org/show_bug.cgi?id=85729

        Reviewed by Chris Fleizach.

        Added support for menclose element. MathML <menclose> element renders
        its content inside an enclosing notation specified by the notation
        attribute. The notation attribute can have values longdiv, box, left,
        right, top, bottom , radical, madruwb, actuarial, roundedbox, circle,
        updiagonalstrike, downdiagonalstrike, verticalstrike and
        horizontalstrike.

        Tests: mathml/presentation/menclose-add-children.html
               mathml/presentation/menclose-notation-attribute-add.html
               mathml/presentation/menclose-notation-attribute-change-value.html
               mathml/presentation/menclose-notation-attribute-remove.html
               mathml/presentation/menclose-notation-attribute-set1.html
               mathml/presentation/menclose-notation-attribute-set2.html
               mathml/presentation/menclose-notation-no-overlap.html
               mathml/presentation/menclose-notation-radical.html
               mathml/presentation/menclose-remove-children.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose):
        * mathml/MathMLAllInOne.cpp:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.cpp:
        * mathml/MathMLMencloseElement.cpp: Added.
        (WebCore::MathMLMencloseElement::MathMLMencloseElement):
        (WebCore::MathMLMencloseElement::create):
        (WebCore::MathMLMencloseElement::createElementRenderer):
        (WebCore::MathMLMencloseElement::isPresentationAttribute):
        (WebCore::MathMLMencloseElement::finishParsingChildren):
        (WebCore::MathMLMencloseElement::collectStyleForPresentationAttribute):
        (WebCore::MathMLMencloseElement::longDivLeftPadding):
        * mathml/MathMLMencloseElement.h: Added.
        (WebCore::toMathMLMencloseElement):
        * mathml/mathattrs.in:
        * mathml/mathtags.in:
        * rendering/mathml/RenderMathMLMenclose.cpp: Added.
        (WebCore::RenderMathMLMenclose::RenderMathMLMenclose):
        (WebCore::RenderMathMLMenclose::addChild):
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::updateLogicalHeight):
        (WebCore::RenderMathMLMenclose::paint):
        (WebCore::RenderMathMLMenclose::checkNotationalValuesValidity):
        * rendering/mathml/RenderMathMLMenclose.h: Added.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        (WebCore::RenderMathMLSquareRoot::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        Added new file related to menclose element implementation. Menclose
        element is created and while parsing its notation attribute based on
        its values like top, left CSSBorder properties are applied and for
        values like circle, verticalstrike, longidv its taken care in paint.
        For radical value an anonymous RenderMathMLSquareRoot is created as
        a child of menclose.

2014-01-28  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] accessibility/range-alter-by-percent.html is failing after r162587.
        https://bugs.webkit.org/show_bug.cgi?id=127774

        Reviewed by Mario Sanchez Prada.

        Implicit value of step in range type elements should be one or larger.

        No new tests. Covered by exiting one.

        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleValueGetMinimumIncrement):

2014-01-28  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/127767> Disable some deprecation warnings to fix the build.

        Reviewed by Ryosuke Niwa.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::configure):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2014-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove soupURIToKURL
        https://bugs.webkit.org/show_bug.cgi?id=127104

        Reviewed by Martin Robinson.

        In favor of a URL constructor receiving a SoupURI. Also add a
        method to URL to create a soupURI.

        * GNUmakefile.list.am: Remove SoupURIUtils and add URLSoup.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * platform/URL.h: Add URL constructor receiving a SoupURI and
        createSoupURI() to create a new soupURI for the URL.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM): Use URL::createSoupURI().
        (WebCore::cookiesForSession): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Use the new URL constructor instead of
        soupURIToKURL.
        (WebCore::createSoupRequestAndMessageForHandle): Use URL::createSoupURI().
        * platform/network/soup/ResourceRequest.h: Rename soupURI as
        createSoupURI to make it clear that the method returns a newly
        created SoupURI.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers): Use URL::createSoupURI().
        (WebCore::ResourceRequest::updateSoupMessage): Ditto.
        (WebCore::ResourceRequest::updateFromSoupMessage): Use the new URL
        constructor instead of soupURIToKURL.
        (WebCore::ResourceRequest::createSoupURI): Use URL::createSoupURI().
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage): Use the new
        URL constructor instead of soupURIToKURL.
        * platform/network/soup/SoupURIUtils.cpp: Removed.
        * platform/network/soup/SoupURIUtils.h: Removed.
        * platform/soup/URLSoup.cpp: Added.
        (WebCore::URL::URL):
        (WebCore::URL::createSoupURI):

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid unnecessary string duplications in FileSystemGtk
        https://bugs.webkit.org/show_bug.cgi?id=127469

        Reviewed by Martin Robinson.

        We are using fileSystemRepresentation() everywhere internally
        which returns a CString that always duplicates the string.
        Add unescapedFilename() internal helper function that returns a
        GUniquePtr and used it everywhere instead of fileSystemRepresentation().

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::unescapedFilename):
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileStat):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::getFileMetadata):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        (WebCore::openFile):

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make webkit_uri_scheme_request_get_web_view() work with CustomProtocols
        https://bugs.webkit.org/show_bug.cgi?id=127614

        Reviewed by Gustavo Noronha Silva.

        Add API to set the page identifier that initiated the request to
        ResourceRequest, and remove the initiatingPageID() method from the
        NetworkingContext class.

        * platform/network/NetworkingContext.h:
        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::initiatingPageID):
        (WebCore::ResourceRequest::setInitiatingPageID):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupRequest):
        (WebCore::ResourceRequest::updateFromSoupRequest):

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Lots of varied and random crashes on the scrolling thread (ScrollbarPainters are going away)
        https://bugs.webkit.org/show_bug.cgi?id=127734
        <rdar://problem/15906263>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingStateScrollingNode.h:
        Retain the ScrollbarPainters in the scrolling state tree.

2014-01-27  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS build fix. FALLTHROUGHs for iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):

2014-01-27  Roger Fong  <roger_fong@apple.com>

        WebGLLoadPolicy::WebGLAsk is an unnecessary value.
        https://bugs.webkit.org/show_bug.cgi?id=127755

        Reviewed by Anders Carlsson.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderTypes.h:

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

        IDB: Cursor support - Messaging, IPC, Threading plumbing
        https://bugs.webkit.org/show_bug.cgi?id=127736

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::cursorID):
        (WebCore::CursorAdvanceOperation::cursorID):

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::OpenCursorOperation::transactionID):

        * WebCore.exp.in:

2014-01-27  Joseph Pecoraro  <pecoraro@apple.com>

        WebCore: Enable -Wimplicit-fallthrough and add FALLTHROUGH annotation where needed
        https://bugs.webkit.org/show_bug.cgi?id=127671

        Reviewed by Ryosuke Niwa.

        * Configurations/Base.xcconfig:
        Enable the warning.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Caught a bug. CSSPropertyWebkitAlt could fall through to CSSPropertyQuotes.

        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        Caught a bug. CSSPropertyWebkitSvgShadow could fall through to CSSPropertyMaskType.

        * platform/Decimal.cpp:
        (WebCore::Decimal::fromString):
        Possible bug. Implementation doesn't seem to match its documentation.
        Filed an issue to follow-up on this unclear function.

        * css/makeprop.pl:
        * css/makevalues.pl:
        * platform/ColorData.gperf:
        Ignore implicit fallthrough warnings in generated code. gperf outputs
        a "/*FALLTHROUGH*/" comment, but is not easily customizable to change
        this output. Easiest to just ignore the warning for now.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        There has been a "fall through" comment immediately followed by a break
        since its introduction in 2003. Removing the inaccurate comment.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::deserialize):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::realLex):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * dom/Node.cpp:
        (WebCore::appendTextContent):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStream):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):
        * platform/graphics/win/FullScreenController.cpp:
        (FullScreenController::Private::fullscreenClientWndProc):
        * platform/text/BidiResolver.h:
        (WebCore::Run>::updateStatusLastFromCurrentDirection):
        (WebCore::Run>::createBidiRunsForLine):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::initializeLocaleData):
        * rendering/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::newLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::originalText):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::replacedContentRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::updateMarkerDataForPathElement):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parsePathDataFromSource):
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::distance):
        Add annotation or break before falling into a default:break;

2014-01-27  Andreas Kling  <akling@apple.com>

        Allow mmap encoded data replacement for WOFF fonts.
        <https://webkit.org/b/127737>

        We always have to convert WOFF fonts to SFNT format. This happens
        in a separate buffer from the CachedFont's internal resource buffer.
        Because of this, there's no need to protect the original buffer from
        mmap replacement.

        With this change, WOFF web fonts are no longer duplicated between
        the network and web processes.

        Reviewed by Brady Eidson.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::mayTryReplaceEncodedData):
        * loader/cache/CachedFont.h:

2014-01-27  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Add support for block progression axis and reverse direction
        https://bugs.webkit.org/show_bug.cgi?id=127715

        Reviewed by thorton.

        This patch adds support for -webkit-progression-direction and -webkit-progression-axis
        to the new column code. This allows columns to stack along the block axis instead of
        the inline axis or to reverse directions along that progression axis.

        Added fast/multicol/newmulticol/progression-reverse.html and
              fast/multicol/newmulticol/progression-reverse-overflow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isTopLayoutOverflowAllowed):
        (WebCore::RenderBlock::isLeftLayoutOverflowAllowed):
        New functions have been added for top and left layout overflow in order to get
        a bunch of code out of RenderBox that didn't belong there. RenderBlock is overriding
        the functions for the old multicolumn layout code to keep it working.

        * rendering/RenderBlock.h:
        Added the new top/left overflow functions.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
        Moved from RenderBlock, since it didn't belong there.

        (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed):
        (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed):
        * rendering/RenderBlockFlow.h:
        Overridden for the new multi-column code to specify when top/left overflow are
        allowed (e.g., when the columns go backwards).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        Overridden to use the new top/left overflow functions.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::isTopLayoutOverflowAllowed):
        (WebCore::RenderBox::isLeftLayoutOverflowAllowed):
        Added base definitions that look at direction and writing-mode.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isTopLayoutOverflowAllowed):
        (WebCore::RenderFlexibleBox::isLeftLayoutOverflowAllowed):
        * rendering/RenderFlexibleBox.h:
        Overrides for flexible box of the top/left overflow functions.

        * rendering/RenderMultiColumnFlowThread.h:
        Make sure requiresBalancing() is set to false if the axis of the columns
        is block, since at least right now, we don't support balancing columns
        along the block axis. (In theory we could support this in the future, but
        nobody has requested it.)

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        Remove the code that expands the width of multi column sets. We now always
        let their logical width match the containing block's content width and instead
        add the overflow to the set itself.

        (WebCore::RenderMultiColumnSet::columnRectAt):
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        Patch all of these functions to know how to handle a block axis or reversed
        direction.

        (WebCore::RenderMultiColumnSet::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.h:
        Make multi-column set add in its overflow in the same way that the old
        multi-column code did, by looking at the last column rect. (This is really
        not a very good way to do it, but it's the same as the old code for now.)

2014-01-27  Daniel Bates  <dabates@apple.com>

        Fix the Mac build following <http://trac.webkit.org/changeset/162887>
        (https://bugs.webkit.org/show_bug.cgi?id=127703)

        Export symbol for WebCore::AXObjectCache::enableAccessibility().

        * WebCore.exp.in:

2014-01-27  Roger Fong  <roger_fong@apple.com>

        [Mac] Unreviewed build fix. Add missing export symbol.

        * WebCore.exp.in:

2014-01-27  Roger Fong  <roger_fong@apple.com>

        [Windows] Tests crashing on Windows after r162816.
        https://bugs.webkit.org/show_bug.cgi?id=127703.

        Reviewed by Alexey Proskuryakov.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::disableAccessibility):
        * accessibility/AXObjectCache.h: Un-inline some methods so that they can be exported.

2014-01-27  Andy Estes  <aestes@apple.com>

        Update bindings test expectations after r162872

        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:

2014-01-27  Andy Estes  <aestes@apple.com>

        Scrub WebKit API headers of WTF macros
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_INSPECTOR.
        * bindings/objc/DOMEvents.h: Guarded include of
        DOM{Gesture,Touch}Event.h with TARGET_OS_IPHONE, since those features
        are always enabled on iOS.
        * platform/graphics/mac/MediaPlayerProxy.h: Replaced PLATFORM(IOS) with
        TARGET_OS_IPHONE and ensured ENABLE_IOS_AIRPLAY is defined.
        * platform/ios/SystemMemory.h: Replaced PLATFORM(IOS) with
        TARGET_OS_IPHONE.
        * platform/ios/wak/WKGraphics.h: Replaced PLATFORM(IOS_SIMULATOR) with
        TARGET_IPHONE_SIMULATOR.

2014-01-27  Jer Noble  <jer.noble@apple.com>

        [iOS] Use callOnMainThread() not dispatch_async() in MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=127701

        Reviewed by Eric Carlson.

        dispatch_async(dispatch_get_main_queue(), ...) used to be fine so long as the main
        thread was also the web thread. But since that's not the case on iOS, we should be
        using callOnMainThread() instead (because it dispatches to the web thread, not as
        its name implies, the main thread).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        (-[WebCoreAVFMovieObserver outputSequenceWasFlushed:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

2014-01-27  Maciej Stachowiak  <mjs@apple.com>

        Move Conditional=BLOB from URL interface to Blob-related methods, to prepare for adding URL API
        https://bugs.webkit.org/show_bug.cgi?id=127719

        Reviewed by Sam Weinig.

        * html/DOMURL.idl:

2014-01-27  Andreas Kling  <akling@apple.com>

        Remove unused USE(OPENTYPE_SANITIZER) code.
        <https://webkit.org/b/127710>

        This code was only used by the Chromium port.

        Reviewed by Darin Adler.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * platform/graphics/WOFFFileFormat.cpp:
        * platform/graphics/WOFFFileFormat.h:
        * platform/graphics/opentype/OpenTypeSanitizer.cpp: Removed.
        * platform/graphics/opentype/OpenTypeSanitizer.h: Removed.


2014-01-27  Andy Estes  <aestes@apple.com>

        Stop the code generator from adding ENABLE() macros to Objective-C DOM headers
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        Instead of adding ENABLE() macros to generated Objective-C DOM
        headers, which might become Public or Private headers, elide generated
        code for disabled features.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateInterface): Passed $defines to GenerateHeader.
        (ConditionalIsEnabled): Checked if the given conditional is found in
        $defines. Handled conditionals with '&' and '|'.
        (GenerateHeader): Rather than calling GenerateConditionalString to
        generate an "#if ENABLE(...)", called ConditionalIsEnabled() to see
        whether we should generate code for the given constant, attribute, or
        function.

2014-01-27  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove restriction of negative values for inset parameters
        https://bugs.webkit.org/show_bug.cgi?id=127704

        Reviewed by Darin Adler.

        The latest version of CSS Shapes (http://www.w3.org/TR/css-shapes/) specification
        doesn't contain any restriction of using negative values for the inset sizing.
        I removed the restriction from the code and added testing for them.

        Existing tests have been extended with the new cases.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeInset):

2014-01-27  Eric Carlson  <eric.carlson@apple.com>

        [iOS] preload=none prevents play()
        https://bugs.webkit.org/show_bug.cgi?id=127702

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::potentiallyPlaying): Cleanup logic to make it simpler to understand,
            fix logic error introduced in r161973
        (WebCore::HTMLMediaElement::updatePlayState): Conditionalize some iOS-only code on whether or not
            we are using the plug-in proxy.

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

        IDB: LevelDB backing store shouldn't know about IDBCursor or IDBCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=127708

        Reviewed by Tim Horton.

        Move that knowledge to the IDBCursorBackendOperations inside the callback.

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

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

        IDB: Remove unused concept of "cursor prefetch"
        https://bugs.webkit.org/show_bug.cgi?id=127700

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

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

        IDB: Refactor out the last of the operation callbacks that are called by the LevelDB backing store
        https://bugs.webkit.org/show_bug.cgi?id=127592

        Reviewed by Tim Horton.

        For each of the 3 remaining operations where the backing store calls callbacks directly,
        factor out the callbacks to the operation itself.


        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162755.
        http://trac.webkit.org/changeset/162755
        https://bugs.webkit.org/show_bug.cgi?id=127696

        not quite right, breaks subframe scrolling in some cases
        (Requested by thorton on #webkit).

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::removeDestroyedNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):

2014-01-27  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] inset() function with multiple spaces on element style
        https://bugs.webkit.org/show_bug.cgi?id=127617

        Reviewed by Dirk Schulze.

        When only a subset of parameters were defined for an inset shape, the built
        inset string contained some extra spaces. This patch fixes the behavior and
        adds tests for the case. I also removed the string allocation optimization from
        buildInsetString, since it's not worthwhile to always allocate as many memory
        as needed for a fully defined inset.

        I added the new test cases to the shapes parser code test.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetString):

2014-01-27  Antti Koivisto  <antti@apple.com>

        * WebCore.exp.in: Add export needed for iOS.

2014-01-27  Antti Koivisto  <antti@apple.com>

        REGRESSION(r133214): Don't invalidate style when adding classes that don't match rules
        https://bugs.webkit.org/show_bug.cgi?id=126177

        Reviewed by Anders Carlsson.
        
        Spotted by Elliott Sprehn in Chromium.

        * dom/Element.cpp:
        (WebCore::checkSelectorForClassChange):
        
            Remove unnecessary templating.

        (WebCore::Element::classAttributeChanged):
        
            Fix logic error with 'continue'.

2014-01-27  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Lockup when playing Icecast radio
        https://bugs.webkit.org/show_bug.cgi?id=127452

        Reviewed by Philippe Normand.

        No new tests. This bug can only be demonstrated with an Icecast stream, and it's
        not clear how to do that in our testing framework.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Wait until we unlock to send notifications.

2014-01-27  Jessie Berlin  <jberlin@apple.com>

        Build fix after r162838.

        * page/FrameView.cpp:
        Remove an unused constant.

2014-01-27  Antti Koivisto  <antti@apple.com>

        Remove repaint throttling
        https://bugs.webkit.org/show_bug.cgi?id=127681

        Reviewed by Sam Weinig.

        Nowadays we throttle layer flushes. This code is unnecessary.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::insertDictatedText):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection):

2014-01-24  Eric Carlson  <eric.carlson@apple.com>

        Merge Chromium TextTrack cleanups
        https://bugs.webkit.org/show_bug.cgi?id=127483

        Reviewed by Darin Adler.

        Merge some TextTrack cleanups:
        https://chromium.googlesource.com/chromium/blink/+/b571b9fbc6e62e05aa77a402cf8f447e681b8ee3
        https://chromium.googlesource.com/chromium/blink/+/6b1940151258150ea01bcf21ebfd958e2af247f4
        https://chromium.googlesource.com/chromium/blink/+/397c2a2d9416f5c0d79bca22d6979f174eefcce2
        https://chromium.googlesource.com/chromium/blink/+/f42ad93e25c6310b2b0327ab7ce5d82d3c4a6c1b
        https://chromium.googlesource.com/chromium/blink/+/d55b52b53b7da05bba5fe378a4278250b9347430
        https://chromium.googlesource.com/chromium/blink/+/cac766ecaaac477a08879f0b3157d0327cc75d96
        https://chromium.googlesource.com/chromium/blink/+/6197ce278696cdd52fc2ad81893f369492468ca0

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired): Remove the LoadableTextTrack* parameter, it isn't used.
        (WebCore::HTMLTrackElement::didCompleteLoad): Ditto.
        * html/HTMLTrackElement.h: didCompleteLoad doesn't need to be virtual.

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired): Pass a reference, not a pointer.
        (WebCore::LoadableTextTrack::cueLoadingStarted): Removed, it wasn't used.
        (WebCore::LoadableTextTrack::cueLoadingCompleted): Pass a reference, not a pointer.
        * html/track/LoadableTextTrack.h: Delete LoadableTextTrackClient, it is no longer used.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::TextTrackLoader): Take a TextTrackLoaderClient reference.
        (WebCore::TextTrackLoader::~TextTrackLoader): Rename m_cachedCueData m_resource.
        (WebCore::TextTrackLoader::cueLoadTimerFired): m_client is a reference.
        (WebCore::TextTrackLoader::cancelLoad): m_cachedCueData -> m_resource.
        (WebCore::TextTrackLoader::processNewCueData): Ditto.
        (WebCore::TextTrackLoader::deprecatedDidReceiveCachedResource): Ditto.
        (WebCore::TextTrackLoader::notifyFinished): Ditto.
        (WebCore::TextTrackLoader::load): shouldLoadCues was removed from the client interface because
            the only implementation always returned true.
        (WebCore::TextTrackLoader::newRegionsParsed): m_client is a reference
        * loader/TextTrackLoader.h:

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Remove an outdated comment.

2014-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Disable accessibility after every test run
        https://bugs.webkit.org/show_bug.cgi?id=127439

        Reviewed by Csaba Osztrogonác.

        Speculative fix for EFL build. Don't process these notifications unless accessibility is enabled.

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

2014-01-27  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for !ENABLE(COMPARE_AND_SWAP) platforms after r162774
        https://bugs.webkit.org/show_bug.cgi?id=127678

        Reviewed by Zoltan Herczeg.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::compareAndSwapNonSharedCharacterBreakIterator):
        Use std::mutex instead of Mutex and std::lock_guard instead of MutexLocker.

2014-01-26  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build (failed to correctly revert some broken changes in the last patch).

        * platform/graphics/cg/BitmapImageCG.cpp:

2014-01-26  Tim Horton  <timothy_horton@apple.com>

        Start cleaning up iOS upstreaming #ifs in platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=127641

        Reviewed by Sam Weinig.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/mac/ColorMac.h:
        Use USE(APPKIT) instead of PLATFORM(MAC) && !PLATFORM(IOS) for NSImage/getNSImage().

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        Remove some code that was only used on OS X on Lion or below.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        ToT WebKit doesn't build on Lion or earlier anymore, so this code can always run.

        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        Use CoreGraphics/CoreGraphics.h instead of ApplicationServices/ApplicationServices.h
        even on Mac, so we can share the include.

        * platform/graphics/cg/IntSizeCG.cpp:
        Remove a random comment of a style we don't tend to use in WebKit,
        and from a file not large enough to need it.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        Remove some more always-true #ifs.

        * platform/graphics/mac/WebLayer.mm:
        Move a #if'd include out to its own block as per the style guide.

2014-01-26  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Make sure the progression axis and direction are propagated to the new columns.
        https://bugs.webkit.org/show_bug.cgi?id=127670

        This patch makes sure that the progression axis and direction style properties
        are properly propagated from the style to the multi-column flow thread. Virtualizing
        and renaming updateColumnInfoFromStyle to updateColumnProgressionFromStyle lets us
        share code between the old multi-column code and the new.

        Reviewed by Sam Weinig.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateColumnProgressionFromStyle):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2014-01-26  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Change the axis property to be a boolean like other isInline checks
        https://bugs.webkit.org/show_bug.cgi?id=127661

        Reviewed by Simon Fraser.

        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::ColumnInfo::progressionIsInline):
        (WebCore::ColumnInfo::setProgressionIsInline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::initialBlockOffsetForPainting):
        (WebCore::RenderBlock::blockDeltaForPaintingNextColumn):
        (WebCore::RenderBlock::setComputedColumnCountAndWidth):
        (WebCore::RenderBlock::updateColumnInfoFromStyle):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::columnNumberForOffset):

2014-01-26  Benjamin Poulain  <benjamin@webkit.org>

        Make DOMStringMap a typedef of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127658

        Reviewed by Sam Weinig.

        The only concrete implementation of DOMStringMap is DatasetDOMStringMap.
        The abstract interface for a single definition is adding complexity for no gain.

        This patch removes DOMStringMap and simply keeps the name through a typedef.
        I used a typedef instead of just renaming DatasetDOMStringMap because I think
        having both name has value. DatasetDOMStringMap is a better description of what
        the implementation does. DOMStringMap is the public name and the classname is
        the same as the JavaScript type by convention.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/DOMStringMap.cpp: Removed.
        * dom/DOMStringMap.h:
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        (WebCore::Element::dataset):
        * dom/Element.h:

2014-01-26  David Kilzer  <ddkilzer@apple.com>

        Part 2: Assertion failure in WebCore::PseudoElement::didRecalcStyle()
        <https://bugs.webkit.org/show_bug.cgi?id=126761>
        <rdar://problem/15793540>

        Reviewed by Simon Fraser.

        * bindings/objc/DOM.mm:
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        (WebCore::getCachedImage):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::image):
        - More places where toRenderImage() should be used instead of
          toImage().
        - Fixed last two places where static_cast<WebCore::RenderImage*>
          was being used instead of toRenderImage().

2014-01-26  Chris Fleizach  <cfleizach@apple.com>

        AX: Disable accessibility after every test run
        https://bugs.webkit.org/show_bug.cgi?id=127439

        Reviewed by Alexey Proskuryakov.

        If accessibility is disabled, we may still need to return the existing 
        AXObjectCache, so that objects can be cleaned up appropriately.

        A such we have to be prepared to handle a nullptr return value in more cases.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::disableAccessibility):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::childrenChanged):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * dom/Document.cpp:
        (WebCore::Document::existingAXObjectCache):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move history item visit count handling to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=127659

        Reviewed by Dan Bernstein.

        Remove all members dealing with visit handling - they're going back to WebKit.

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::create):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move lastVisitWasHTTPNonGet out to WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=127657

        Reviewed by Dan Bernstein.

        Remove m_lastVisitWasHTTPNonGet, it's only used by WebKit.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        * history/HistoryItem.h:

2014-01-26  Zalan Bujtas  <zalan@apple.com>

        Subpixel Layout: Align <input type="button", submit etc (PushButtonPart) top and bottom paddings with <button>
        https://bugs.webkit.org/show_bug.cgi?id=127640

        Reviewed by Simon Fraser.

        <button> sets padding-top: 2px and padding-bottom: 3px as default values (html.css),
        while <input type="button" (submit, etc) has the hardcoded values of 0, 0 and we center the text using the available space.
        This results in different baseline text position in normal cases. This adjustment puts the <input type='button'
        rendering back to the pre-subpixel layout state.

        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlPadding):

2014-01-26  Benjamin Poulain  <bpoulain@apple.com>

        Improve the bindings of NodeList's name accessor
        https://bugs.webkit.org/show_bug.cgi?id=127358

        Reviewed by Geoffrey Garen.

        When accessing an item of NodeList by name, the default bindings was
        going through the list of node twice:
        -First, getOwnProperty calls canGetItemsForName() to find if a property exists for
         the given name. This in turn used NodeList::namedItem() which is a slow operation.
        -Then, the value itself was queried through nameGetter(), calling NodeList::namedItem()
         a second time to find the same value.

        This patch kills the default name getter in favor of a getOwnPropertySlotDelegate() returning
        the value directly on the PropertySlot.

        Ad Hoc testing show about 15% speed up for simple cases.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::getOwnPropertySlotDelegate):
        * dom/NodeList.idl:

2014-01-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InspectorDebuggerAgent into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=127629

        Rubber-stamped by Sam Weinig.

        Test: inspector-protocol/debugger/pause-on-assert.html

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agents/InspectorDebuggerAgent.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        - Remove InspectorDebuggerAgent.
        - Add WebDebuggerAgent (shared between Page and Worker).

        * inspector/WebDebuggerAgent.h: Added.
        (WebCore::WebDebuggerAgent::~WebDebuggerAgent):
        * inspector/WebDebuggerAgent.cpp: Added.
        (WebCore::WebDebuggerAgent::WebDebuggerAgent):
        (WebCore::WebDebuggerAgent::enable):
        (WebCore::WebDebuggerAgent::disable):
        Shared code for Page and Worker debugger agents.
        Instrumenting agents is a concept in WebCore only,
        and the Debugger agent is only in the instrumenting
        agents list when it is enabled and removed when disabled.

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        Update namespace for debugger agent.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::isConsoleAssertMessage):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        DebuggerAgent in JavaScriptCore does not yet know about console
        types. So temporarily handle it here. We need to give JavaScriptCore
        some concept of Console messages and types.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::enable):
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        * inspector/PageDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h:
        Modernize the Page and Worker debugger agents.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        New constructors for the debugger agents.

2014-01-25  Timothy Hatcher  <timothy@apple.com>

        Remove dead code from the JSC profiler.

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

        Reviewed by Mark Lam.

        Passes existing tests in fast/profiler.

        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor): Remove visible.
        * inspector/ScriptProfileNode.idl: Ditto.
        * inspector/protocol/Profiler.json: Ditto.

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove unused support for DRAGGABLE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=127642

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addAnnotatedRegions):
        * rendering/RenderObject.h:
        (WebCore::AnnotatedRegionValue::operator==):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-01-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up SVGPatternElement::collectPatternAttributes 
        https://bugs.webkit.org/show_bug.cgi?id=127612

        Reviewed by Andreas Kling.

        This patch refactors SVGPatternElement::collectPatternAttributes() by extracting
        the setPatternAttributes logic into a new function. This patch also changes the
        while loop to be easier to understand and similar to collectGradientAttributes.

        * svg/SVGPatternElement.cpp:
        (WebCore::setPatternAttributes):
        (WebCore::SVGPatternElement::collectPatternAttributes):

2014-01-25  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: RenderInline is not centered when child RenderTextControl's innerTextRenderer needs bias centering.
        https://bugs.webkit.org/show_bug.cgi?id=125659

        Reviewed by Andreas Kling

        layoutMod(logicalHeightDiff, 2) fails to bias round when subpixel layout is enabled. It sets
        the denominator value to 2, which returns incorrect modulo result.
        (subpixel off: 3px % 2 = 1 vs subpixel on: (3px * 64) -> 192 % 2 = 0)

        Covered by existing tests.

        * platform/LayoutUnit.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::centerContainerIfNeeded):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::centerRenderer):
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderTextControlSingleLine.h:

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove more unnecessary #if PLATFORM(IOS)s in ApplicationCacheStorage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127635

        Reviewed by Antti Koivisto.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::executeSQLCommand):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::executeStatement):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        (WebCore::ApplicationCacheStorage::loadCache):

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove some iOS #ifdefs by adding SQLiteDatabaseTracker to all the builds
        https://bugs.webkit.org/show_bug.cgi?id=127632

        Reviewed by Darin Adler.

        Move the SQLiteDatabaseTracker and client from platform/sql/ios to platform/sql,
        as there is nothing iOS specific about it. Then, un-#ifdef all its uses. For
        ports that don't setup a client, this has no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::sendWillRevealEdgeEventsIfNeeded):
        * platform/sql/SQLiteDatabaseTracker.cpp: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.cpp.
        * platform/sql/SQLiteDatabaseTracker.h: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTracker.h.
        * platform/sql/SQLiteDatabaseTrackerClient.h: Copied from Source/WebCore/platform/sql/ios/SQLiteDatabaseTrackerClient.h.
        * platform/sql/ios: Removed.
        * platform/sql/ios/SQLiteDatabaseTracker.cpp: Removed.
        * platform/sql/ios/SQLiteDatabaseTracker.h: Removed.
        * platform/sql/ios/SQLiteDatabaseTrackerClient.h: Removed.
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::openDatabase):
        (WebCore::StorageAreaSync::sync):
        * storage/StorageTracker.cpp:

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Remove an unused FrameLoaderClient function
        https://bugs.webkit.org/show_bug.cgi?id=127628

        Reviewed by Andreas Kling.

        All implementations of FrameLoaderClient::shouldStopLoadingForHistoryItem return true and this function
        was only used by Chromium so we can get rid of it.

        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::shouldStopLoadingForHistoryItem):

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

        Call deprecatedCharacters instead of characters at more call sites
        https://bugs.webkit.org/show_bug.cgi?id=127631

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLNonNegativeInteger):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty):
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        Use the new name.

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

        Get rid of ICU_UNICODE and WCHAR_UNICODE remnants
        https://bugs.webkit.org/show_bug.cgi?id=127623

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Removed SmartReplaceICU.cpp.
        * GNUmakefile.list.am: Ditto.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::modifyMovingRight): Ditto.
        (WebCore::FrameSelection::modifyMovingLeft): Ditto.

        * editing/SmartReplace.cpp: Moved code here from SmartReplaceICU,
        since we always support ICU now. Added some FIXME comments about
        bugs and mistakes I spotted in the code as I was moving it.
        * editing/SmartReplaceICU.cpp: Removed.

        * editing/TextIterator.cpp: Removed unneeded checks.
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData): Ditto.
        (WebCore::ThreadGlobalData::destroy): Ditto.
        * platform/ThreadGlobalData.h: Ditto.
        * platform/URL.cpp:
        (WebCore::appendEncodedHostname): Ditto.
        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Ditto.
        Also removed unneeded "using namespace".
        * platform/text/TextCodecICU.cpp: Ditto.
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode): Ditto.
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps): Ditto.

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

        Get rid of UnicodeRange.h/cpp, using ICU instead
        https://bugs.webkit.org/show_bug.cgi?id=127622

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Remove UnicodeRange.h/cpp.
        * GNUmakefile.list.am: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): To check if a character has
        multiple code pages, use UCHAR_UNIFIED_IDEOGRAPH instead of cRangeSetCJK.
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Ditto. Also, to check if a
        character is in the Thai block, use UBLOCK_THAI.

        * platform/graphics/wince/FontPlatformData.cpp: Removed include of UnicodeRange.h.

        * platform/text/UnicodeRange.cpp: Removed.
        * platform/text/UnicodeRange.h: Removed.

        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle): To figure
        out if a character is full width, use UCHAR_EAST_ASIAN_WIDTH, instead of hard-coding
        "not Latin or Arabic" as the rule.

2014-01-25  Tim Horton  <timothy_horton@apple.com>

        Remove an unnecessary platform #if in BitmapImage(CG)::checkForSolidColor()
        https://bugs.webkit.org/show_bug.cgi?id=127610

        Reviewed by Simon Fraser.

        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        Over time, the two sides of this #if !PLATFORM(IOS) converged. Remove the #if
        and merge the code. We explicitly use kCGBitmapByteOrder32Big to be correct everywhere.

2014-01-25  Tim Horton  <timothy_horton@apple.com>

        [cg] Look in the PNG dictionary for image duration information
        https://bugs.webkit.org/show_bug.cgi?id=127611
        <rdar://problem/15408643>

        Reviewed by Simon Fraser.

        We should look in the PNG properties dictionary for frame duration and loop count data.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::repetitionCount):
        Mush repetitionCount a bit more to make it easier to read (early returns, etc.)
        Also, look in the PNG properties dictionary for a loop count.

        (WebCore::ImageSource::frameDurationAtIndex):
        Look in the PNG properties dictionary for delay time.
        Get rid of WebCoreCGImagePropertyGIFUnclampedDelayTime; it hasn't
        been needed since Snow Leopard.

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Remove atomicIncrement/atomicDecrement
        https://bugs.webkit.org/show_bug.cgi?id=127625

        Reviewed by Andreas Kling.

        Replace atomicIncrement/atomicDecrement with std::atomic.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::incrementActiveSourceCount):
        (WebCore::AudioContext::decrementActiveSourceCount):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::ref):
        (WebCore::AudioNode::finishDeref):
        * Modules/webaudio/AudioNode.h:
        * Modules/webdatabase/OriginLock.h:

2014-01-25  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix for WinCairo.

        * platform/network/curl/CurlDownload.h:
        Included wtf/Threading.h for ThreadIdentifier definition.

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Modernize HashTable threading code
        https://bugs.webkit.org/show_bug.cgi?id=127621

        Reviewed by Darin Adler.

        Explicitly include headers that used to be brought in by HashTable.h

        * platform/DragData.h:
        Change a Windows-specific typedef to avoid having to include WindDef.h from a header.

        * platform/audio/AudioSession.h:
        * platform/network/cf/SocketStreamHandle.h:

2014-01-25  Zan Dobersek  <zdobersek@igalia.com>

        Move CSSGroupingRule, CSSStyleSheet, ElementRuleCollector to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127575

        Reviewed by Andreas Kling.

        Use std::unique_ptr and std::make_unique in place of OwnPtr and adoptPtr
        in the CSSGroupingRule, CSSStyleSheet and ElementRuleCollector classes.

        * css/CSSFunctionValue.cpp: Remove the unnecessary PassOwnPtr header inclusion.
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::cssRules):
        * css/CSSGroupingRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addMatchedRule):
        * css/ElementRuleCollector.h:

2014-01-25  Zan Dobersek  <zdobersek@igalia.com>

        Move MediaQueryMatcher, SelectorFilter to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127574

        Reviewed by Andreas Kling.

        Replace the use of OwnPtr and adoptPtr with std::unique_ptr and std::make_unique
        in the MediaQueryMatcher and SelectorFilter classes.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        (WebCore::MediaQueryMatcher::evaluate):
        (WebCore::MediaQueryMatcher::addListener):
        (WebCore::MediaQueryMatcher::styleResolverChanged):
        * css/MediaQueryMatcher.h:
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::popParentStackFrame):
        (WebCore::SelectorFilter::setupParentStack):
        * css/SelectorFilter.h:

2014-01-25  Zan Dobersek  <zdobersek@igalia.com>

        Move PropertySetCSSStyleDeclaration, WebKitCSSKeyframesRule to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127572

        Reviewed by Andreas Kling.

        Switch the PropertySetCSSStyleDeclaration and WebKitCSSKeyframesRule classes from using
        OwnPtr and adoptPtr to using std::unique_ptr and std::make_unique.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        (WebCore::StyleRuleCSSStyleDeclaration::didMutate):
        (WebCore::InlineCSSStyleDeclaration::didMutate):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::cssRules):
        * css/WebKitCSSKeyframesRule.h:

2014-01-25  Zan Dobersek  <zdobersek@igalia.com>

        Move StyleProperties, StyleResolver to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127570

        Reviewed by Andreas Kling.

        Move the StyleProperties and StyleResolver classes from using OwnPtr and adoptPtr
        to using std::unique_ptr and std::make_unique.

        * css/StyleInvalidationAnalysis.h: Remove the PassOwnPtr.h header inclusion.
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::ensureCSSStyleDeclaration):
        (WebCore::MutableStyleProperties::ensureInlineCSSStyleDeclaration):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addViewportDependentMediaQueryResult):
        * css/StyleResolver.h:
        * css/StyleScopeResolver.h:

2014-01-25  Zan Dobersek  <zdobersek@igalia.com>

        Move CSSFontFace, CSSFontSelector to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127569

        Reviewed by Andreas Kling.

        Move the CSSFontFace and CSSFontSelector classes from using OwnPtr, PassOwnPtr and adoptPtr
        to using std::unique_ptr, move semantics and std::make_unique.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::addSource):
        * css/CSSFontFace.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontFace):
        * css/CSSFontSelector.h:

2014-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InspectorRuntimeAgent into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=127605

        Reviewed by Timothy Hatcher.

        Covered by existing tests. No change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Remove WebCore InspectorRuntimeAgent.

        * ForwardingHeaders/inspector/agents/InspectorRuntimeAgent.h: Added.
        Add JavaScriptCore InspectorRuntimeAgent.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        New constructors for the runtime agent.

        * inspector/PageRuntimeAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext):
        (WebCore::PageRuntimeAgent::globalVM):
        Modernize and implement globalVM.

        * inspector/WorkerRuntimeAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        (WebCore::WorkerRuntimeAgent::globalVM):
        Modernize and implement globalVM.

2014-01-25  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Add parameters from 'DOM Object Model Core' spec and 'DOM CSS' spec that can be NULL

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

        Reviewed by Xan Lopez.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (ParamCanBeNull): Add new pairs (function, parameter) that can be NULL

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Get rid of BackForwardController::isActive()
        https://bugs.webkit.org/show_bug.cgi?id=127604

        Reviewed by Sam Weinig.

        BackForwardController::isActive() used to mean "my page maintains a back forward
        list that has zero capacity". Move that logic into WebKit instead, namely the
        WebFrameLoaderClient::canCachePage function so we can simplify WebCore.

        * history/BackForwardClient.h:
        * history/BackForwardController.cpp:
        * history/BackForwardController.h:
        * history/BackForwardList.h:
        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):

2014-01-25  Antti Koivisto  <antti@apple.com>

        REGRESSION(r162744): wsj.com paints white
        https://bugs.webkit.org/show_bug.cgi?id=127619

        Reviewed by Sam Weinig.

        Test: fast/css/stylesheet-layout-with-pending-paint.html

        * dom/Document.cpp:
        (WebCore::Document::styleResolverChanged):
        
            Ensure we switch out from IgnoreLayoutWithPendingSheets state after stylesheet loads complete.

2014-01-24  Dan Bernstein  <mitz@apple.com>

        Reverted r162760. It broke more things.

        * WebCore.exp.in:

2014-01-24  Dan Bernstein  <mitz@apple.com>

        Try to fix some 32-bit builds.

        * WebCore.exp.in:

2014-01-24  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Replace usage of DEFINE_STATIC_LOCAL with NeverDestroyed in WebCore/platform/efl
        https://bugs.webkit.org/show_bug.cgi?id=127607

        Reviewed by Anders Carlsson.

        * platform/efl/EflKeyboardUtilities.cpp:
        (WebCore::keyMap): Use NeverDestroyed instead of DEFINE_STATIC_LOCAL.
        (WebCore::windowsKeyMap): Ditto.
        (WebCore::keyDownCommandsMap): Ditto.
        (WebCore::keyPressCommandsMap): Ditto.
        * platform/efl/GamepadsEfl.cpp:
        (WebCore::sampleGamepads): Ditto.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::systemFont): Do not use unnecessary DEFINE_STATIC_LOCAL.

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move JavaScriptCallFrame and ScriptDebugServer into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127543

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * ForwardingHeaders/inspector/ScriptDebugServer.h: Added.
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * inspector/JavaScriptCallFrame.idl: Removed.
        Update builds now that ScriptDebugServer moved to JavaScriptCore.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::PageScriptDebugServer::isContentScript):
        (WebCore::PageScriptDebugServer::reportException):
        * bindings/js/WorkerScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::WorkerScriptDebugServer::reportException):
        Handle ScriptDebugServer functionality depending on WebCore knowledge.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::breakpointActionSound):
        Handle ScriptDebugServer functionality that depended on WebCore knowledge.
        This will eventually be written in a non-WebCore specific way.

        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        Update ScriptDebugServer type now that it is in namespace Inspector.

        * workers/WorkerGlobalScope.h:
        Make addConsoleMessage public again so the inspector can call it.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/PageDebuggerAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * inspector/WorkerDebuggerAgent.h:
        Let each of these handle console logs in their own way. Both of these
        eventually go through the PageConsole and log through the InspectorConsoleAgent
        and ChromeClient.

2014-01-24  Brent Fulgham  <bfulgham@apple.com>

        Improve latching behavior for wheel events
        https://bugs.webkit.org/show_bug.cgi?id=127386
        <rdar://problem/12176858>

        Reviewed by Simon Fraser.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree): Initialize new values used for tracking
        scroll latching state.
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Check for an existing
        latched node and stay in fast scrolling mode if possible.
        (WebCore::ScrollingTree::removeDestroyedNodes): Clear latched node if it's being removed.
        (WebCore::ScrollingTree::latchedNode): Added
        (WebCore::ScrollingTree::setLatchedNode): Added
        (WebCore::ScrollingTree::clearLatchedNode): Added
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasLatchedNode): Added
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::shouldConsiderLatching): Added
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent): Determine latching state
        based on wheel event state and position of mouse pointer in the document.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Another attempted build fix.

        Use wildcards in the the std::duration symbol.

        * WebCore.exp.in:

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Start using the RemoteScrollingCoordinatorProxy on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127598

        Reviewed by Tim Horton.

        Add a scrollPositionChangedViaDelegatedScrolling() function to
        ScrollingTree, allowing the ScrollingTree to be informed about
        external sources of scrolling.
        
        Also add a convenience getter for nodes, nodeForID().

        * WebCore.exp.in:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::nodeForID):
        * page/scrolling/ScrollingTree.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        To avoid assertions on iOS, bail from iOS WK1 fixed position code if
        we have a ScrollingCoordinator.
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers):
        Ditto.

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Add typesafe casts for ScrollingTreeNode classes
        https://bugs.webkit.org/show_bug.cgi?id=127597

        Reviewed by Tim Horton.

        Add a ScrollingNodeType member to ScrollingTreeNodes and
        use it for type-safe casting.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::nodeType):
        (WebCore::ScrollingTreeNode::scrollingNodeID):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Remove back/forward list related functions from Page
        https://bugs.webkit.org/show_bug.cgi?id=127596

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::canGoBackOrForward):
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):
        (WebCore::BackForwardController::count):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):
        * page/Page.cpp:
        * page/Page.h:

2014-01-24  Antti Koivisto  <antti@apple.com>

        Update style asynchronously after style sheet load
        https://bugs.webkit.org/show_bug.cgi?id=127563

        Reviewed by Andreas Kling.
        
        Since we don't attach synchronously we don't need to recalc style synchronously either.

        * dom/Document.cpp:
        (WebCore::Document::didRemoveAllPendingStylesheet):

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Default style of input type=checkbox/radio (0.5ex) adds 1px extra margin on both left and right.
        https://bugs.webkit.org/show_bug.cgi?id=125728

        Reviewed by Simon Fraser.

        Using the 0.5ex value to set checkbox/radio left and right margins is a long-standing
        (khtml) behavior. While it indicates dynamic behavior, in order to get the margins changed,
        the widget's font size needs to be set, which is rather rare for such input types.
        It also results in odd layout, where the checkbox's indentation may seem to change randomly.

        '<input style="font-size: 30px;" type="checkbox">foo' changes neither the checkbox
        nor the text size, but it indents the line by about 15px.

        Other browsers (FF, Opera with Presto) disagree and they set static margins values.
        2px is the current default computed value.

        * css/html.css:
        (input[type="radio"], input[type="checkbox"]):

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Put functions need to take a base object and a this value, and perform type checks on |this|
        https://bugs.webkit.org/show_bug.cgi?id=127594

        Reviewed by Geoffrey Garen.

        Update bindings generator to emit setters with correct type, and perform
        type checks on |this|, instead of the baseObject.

        Test: js/dom/dom-as-prototype-assignment-exception.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjReplaceableAttribute):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Generic JSObject::put should handle static properties in the classinfo hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=127523

        Reviewed by Geoffrey Garen.

        Update the bindings generator to emit the flag indicating the presence
        of setters, and remove the many (now unnecessary) put overrides.
        Tested with run-jsc-benchmarks and shows neutral performance. A few of the
        micro benchmarks actually get a significant performance increase which
        is nice.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
            We still need a custom call to lookupPut here in order
            to get the magic security semantics of the window object.
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (InstanceOverridesPutImplementation):
        (InstanceOverridesPutDeclaration):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:
          Remove bogus attribute, as it has never been in the spec and should not
          have been added.

2014-01-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162713.
        http://trac.webkit.org/changeset/162713
        https://bugs.webkit.org/show_bug.cgi?id=127593

        broke media/network-no-source-const-shadow (Requested by
        thorton on #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::put):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::put):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::put):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Replace LayoutUnit() calls to a more descriptive LayoutUnit::fromPixel(int).
        https://bugs.webkit.org/show_bug.cgi?id=127580

        Reviewed by Simon Fraser.

        LayoutUnit(1) statement is ambiguous. While it is intended to set one (CSS) pixel, it
        could be interpreted as 1 layout unit (1/64th of a CSS pixel atm).

        No change in behavior.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRegionHighlight):
        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::collapseMargins):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        Prepare scrolling tree to handle > 1 scrolling node
        https://bugs.webkit.org/show_bug.cgi?id=127590

        Reviewed by Tim Horton.

        Clean up the code path called after the ScrollingTree has scrolled a node,
        to prepare for multiple scrolling nodes.
        
        Change "updateMainFrameScrollPosition" terminology to "updateScrollPositionAfterAsyncScroll",
        and pass along the ScrollingNodeID that scrolled.
        
        Move updateMainFrameScrollPosition-related code from ScrollingCoordinator to
        AsyncScrollingCoordinator, since this sync-up is only necessary when doing
        async scrolling.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::matchesUpdateType):
        Package up the data related to a scheduled scroll into a ScheduledScrollUpdate struct,
        for easier comparison and cleaner code.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):

2014-01-24  Mark Lam  <mark.lam@apple.com>

        ASSERT(!m_markedSpace.m_currentDelayedReleaseScope) reloading page in inspector.
        <https://webkit.org/b/127582>

        Reviewed by Mark Hahnenberg.

        No new tests.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::attachDebugger):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::detachDebugger):
        - Adding reasons for detaching a globalObject from the debugger.

2014-01-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make PaintInfo layout unit aware.
        https://bugs.webkit.org/show_bug.cgi?id=127562

        Reviewed by Simon Fraser.

        Replace PaintInfo's IntRect with LayoutRect to be able to render to
        subpixel positions.

        No functional changes.

        * platform/graphics/LayoutRect.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::horizontalScrollbarStart):
        (WebCore::RenderLayer::drawPlatformResizerImage):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph):
        * rendering/svg/SVGRenderingContext.h:

2014-01-24  Simon Fraser  <simon.fraser@apple.com>

        #ifdef out handleWheelEventPhase for iOS
        https://bugs.webkit.org/show_bug.cgi?id=127583

        Reviewed by Tim Horton.

        handleWheelEventPhase() doesn't make any sense for iOS, which
        has no wheel events.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:

2014-01-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Don't destroy all the renderers when a multi-column block stops being multi-column (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=127584

        Make the logic for when you need columns and when you don't shared between the
        old multi-column code and the new multi-column code. Make sure that the flow thread
        and sets get created lazily and destroyed on-demand when whether or not we should
        have multiple columns changes.

        Reviewed by Beth Dakin.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateLogicalWidthAndColumnWidth):
        No longer virtual. The new column code now uses this function too.

        (WebCore::RenderBlock::availableLogicalWidth):
        Renamed desiredColumnWidth() to computedColumnWidth().

        (WebCore::RenderBlock::computeColumnCountAndWidth):
        Renamed calcColumnWidth to computeColumnCountAndWidth.

        (WebCore::RenderBlock::setComputedColumnCountAndWidth):
        Rename setDesiredColumnCountAndWidth to computed.

        (WebCore::RenderBlock::computedColumnWidth):
        (WebCore::RenderBlock::computedColumnCount):
        Renamed desiredColumnWidth/Count to computedColumnWidth/Count and made them virtual.

        (WebCore::RenderBlock::updateFirstLetterStyle):
        desired -> computed rename.

        * rendering/RenderBlock.h:
        Renames and made a few functions virtual so that RenderBlockFlow can override.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        Don't create the flow thread at construction time any longer.

        (WebCore::RenderBlockFlow::createMultiColumnFlowThread):
        (WebCore::RenderBlockFlow::destroyMultiColumnFlowThread):
        The methods to create and destroy flow threads. These work at any time now and will
        fix up the render tree accordingly.

        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        Virtual override that creates/destroys the new multi-column information as needed.

        (WebCore::RenderBlockFlow::computedColumnWidth):
        (WebCore::RenderBlockFlow::computedColumnCount):
        Overrides to return the cached column width and count from the flow thread.

        * rendering/RenderBlockFlow.h:
        Has overrides of the virtual functions needed to turn multi-column state on/off and
        to hand back computed count/width information.

        * rendering/RenderMultiColumnFlowThread.cpp:
        * rendering/RenderMultiColumnFlowThread.h:
        Removed the algorithm to compute column count and width, since this has been combined
        with the old multi-column layout code.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeColumnCountAndWidth):
        Renamed desired -> computed.

        * rendering/RenderView.h:
        Renamed desired -> computed.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTree):
        * style/StyleResolveTree.h:
        The Settings argument is no longer needed now that we don't destroy and re-create
        the renderer for a block flow if it stops being (or becomes) multi-column.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * WebCore.exp.in:

2014-01-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Convert some NMake files to MSBuild project files
        https://bugs.webkit.org/show_bug.cgi?id=127579

        Reviewed by Tim Horton.

        * WebCore.vcxproj/WebCore.make: Removed.
        * WebCore.vcxproj/WebCore.proj: Added.

2014-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        fast/profiler tests ASSERTing after moving recompileAllJSFunctions off a timer
        https://bugs.webkit.org/show_bug.cgi?id=127566

        Reviewed by Oliver Hunt.

        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::closeDummyInspectorFrontend):
        Now that we don't have to fake that this is a page being destroyed to
        avoid recompilation. Use the InspectorDestroyed reason.

2014-01-24  Anders Carlsson  <andersca@apple.com>

        Get rid of monotonicallyIncreasingTimeMS and start using std::chrono instead
        https://bugs.webkit.org/show_bug.cgi?id=127571

        Reviewed by Antti Koivisto.

        WebCore.exp.in:
        Update symbols.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setParsing):
        (WebCore::Document::isLayoutTimerActive):
        (WebCore::Document::minimumLayoutDelay):
        (WebCore::Document::elapsedTime):
        (WebCore::Document::write):
        (WebCore::Document::styleResolverChanged):
        * dom/Document.h:
        Use std::chrono instead of doubles for the times and durations.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::didReceiveData):
        * fileapi/FileReader.h:
        Switch over to std::chrono.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        Update for Document::elapsedTime() changes.

        * page/Settings.cpp:
        (WebCore::Settings::setLayoutInterval):
        * page/Settings.h:
        (WebCore::Settings::layoutInterval):
        Change layoutInterval to be std::chrono::milliseconds instead of int.

        * platform/Timer.h:
        (WebCore::TimerBase::startOneShot):
        Add an overload that takes std::chrono::milliseconds.

2014-01-24  Oliver Hunt  <oliver@apple.com>

        Generic JSObject::put should handle static properties in the classinfo hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=127523

        Reviewed by Geoffrey Garen.

        Update the bindings generator to emit the flag indicating the presence
        of setters, and remove the many (now unnecessary) put overrides.
        Tested with run-jsc-benchmarks and shows neutral performance. A few of the
        micro benchmarks actually get a significant performance increase which
        is nice.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
            We still need a custom call to lookupPut here in order
            to get the magic security semantics of the window object.
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/scripts/CodeGeneratorJS.pm:
        (hashTableAccessor):
        (prototypeHashTableAccessor):
        (constructorHashTableAccessor):
        (InstanceOverridesPutImplementation):
        (InstanceOverridesPutDeclaration):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::put):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * html/canvas/WebGLRenderingContext.idl:
          Remove bogus attribute, as it has never been in the spec and should not
          have been added.

2014-01-24  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Eliminate RenderMultiColumnBlock
        https://bugs.webkit.org/show_bug.cgi?id=127565

        Reviewed by Antti Koivisto.

        This patch eliminates RenderMultiColumnBlock and folds all of its remaining code
        back into RenderBlockFlow. This allows all block flows to support multi-column
        layout, including table cells, list items, and the RenderView itself.

        * CMakeLists.txt:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove RenderMultiColumnBlock from the makefiles.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns):
        Tweak the comment, since it was no longer accurate.

        * rendering/RenderBlock.h:
        Move some functions down into RenderBlockFlow.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::createMultiColumnFlowThreadIfNeeded):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::layoutSpecialExcludedChild):
        (WebCore::RenderBlockFlow::updateLogicalWidthAndColumnWidth):
        (WebCore::RenderBlockFlow::addChild):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
         * rendering/RenderBlockFlow.h:
         Move a bunch of functions from RenderMultiColumnBlock up into RenderBlockFlow.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::isUnsplittableForPagination):
        Calls isMultiColumnBlockFlow() now instead of testing for a specific renderer type.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        Remove the multicolumn block creation code, since we always make a block flow now.

        * rendering/RenderMultiColumnBlock.cpp: Removed.
        * rendering/RenderMultiColumnBlock.h: Removed.
        Nuke the files.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::initialLogicalWidth):
        (WebCore::RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::addForcedBreak):
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::columnGap):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        Change all of the functions in the multicolumnset and multicolumnflowthread classes
        to cast the parent to a RenderBlockFlow now instead of a RenderMultiColumnBlock.
        Change the code to call through to multiColumnFlowThread() for column-specific information
        for that parent block.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMultiColumnBlockFlow):
        Remove isRenderMultiColumnBlock() and replace with isMultiColumnBlockFlow().

        * rendering/RenderingAllInOne.cpp:
        Remove RenderMultiColumnBlock include.
        
2014-01-24  Brady Eidson  <beidson@apple.com>

        IDB: support createIndex/deleteIndex messaging
        https://bugs.webkit.org/show_bug.cgi?id=127546

        Reviewed by Tim Horton.

        * WebCore.exp.in: Export a needed CrossThreadCopier

2014-01-24  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <http://trac.webkit.org/changeset/162704>
        (https://bugs.webkit.org/show_bug.cgi?id=127293)

        Only include TargetConditionals.h when building on a Darwin-based OS.
        Also, check that TARGET_OS_IPHONE is defined before referencing its value
        since it will be undefined when building on Windows.

        * bindings/objc/PublicDOMInterfaces.h:

2014-01-24  Daniel Bates  <dabates@apple.com>

        Bindings generation tests hit an error trying to include wtf/Platform.h after r161638
        https://bugs.webkit.org/show_bug.cgi?id=127293

        Reviewed by Alexey Proskuryakov.

        Include TargetConditionals.h instead of wtf/Platform.h as the latter isn't available
        in the public SDK.

        As a side effect of this change, replace usage of PLATFORM(IOS) with TARGET_OS_IPHONE.

        * bindings/objc/PublicDOMInterfaces.h:

2014-01-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Table cells and list items need to work as multicolumn blocks.
        https://bugs.webkit.org/show_bug.cgi?id=127365
        
        This patch is a first step towards eliminating RenderMultiColumnBlock and moving
        all its functionality into RenderBlockFlow. Doing so will allow table cells, list
        items and the RenderView to use the new multi-column layout.
        
        Reviewed by Simon Fraser.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMultiColumnFlowThread):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::multiColumnFlowThread):
        Add the flow thread pointer to the multi-column flow thread to RenderBlockFlow's
        rare data. This lets us use only one pointer in the rare data to point to an object
        that can hold all of the rest of the multi-column info.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        Move the construction of the flow thread to the constructor. This ensures we
        never have a null flow thread and lets us avoid having to null check it for
        empty multi-column blocks.

        (WebCore::RenderMultiColumnBlock::columnHeightAvailable):
        (WebCore::RenderMultiColumnBlock::columnWidth):
        (WebCore::RenderMultiColumnBlock::columnCount):
        (WebCore::RenderMultiColumnBlock::updateLogicalWidthAndColumnWidth):
        The above functions now call through to the multi-column flow thread for results.

        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):
         Set the column height available on the flow thread.

        (WebCore::RenderMultiColumnBlock::relayoutForPagination):
        The balancing pass and guard is in the multi-column flow thread now.

        (WebCore::RenderMultiColumnBlock::addChild):
        Don't have to create the flow thread here any longer, since we do it up front
        in the constructor of RenderMultiColumnBlock.

        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        Don't need the null check of the flow thread any more.

        * rendering/RenderMultiColumnBlock.h:
        Change the inlined functions to not be inlined, since they need to call
        RenderMultiColumnFlowThread functions now.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        Init the new member variables we moved here from RenderMultiColumnBlock.

        (WebCore::RenderMultiColumnFlowThread::computeColumnCountAndWidth):
        Moved from RenderMultiColumnBlock.

        * rendering/RenderMultiColumnFlowThread.h:
        Add public getters/setters to the member variables so that RenderMultiColumnBlock can
        still see them. Move the member variables here from RenderMultiColumnBlock.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::columnCount):
        Call through to the flow thread instead.

2014-01-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r162663.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRectInternal): Renamed from visibleContentRect.

2014-01-24  Zan Dobersek  <zdobersek@igalia.com>

        Move HistoryItem to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127275

        Reviewed by Darin Adler.

        Replace the uses of OwnPtr and PassOwnPtr in the HistoryItem class with std::unique_ptr.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::addRedirectURL):
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):
        WebCore.exp.in: Update the symbol.

2014-01-23  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: unresolvable percent height results in 1px tall multicol
        https://bugs.webkit.org/show_bug.cgi?id=122826

        Reviewed by David Hyatt.

        If a box has a percentage height, but the computed height of its
        containing block is auto, the computed height of the box also becomes
        auto. computeContentLogicalHeight() returns -1 if the height isn't
        resolvable, and we need to make sure that such a value doesn't
        constrain the height of the multicol container.

        Tests: fast/multicol/newmulticol/unresolvable-percent-height-2.html
               fast/multicol/newmulticol/unresolvable-percent-height.html
               fast/multicol/newmulticol/unresolvable-percent-max-height-2.html
               fast/multicol/newmulticol/unresolvable-percent-max-height.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move ContentSearchUtils, ScriptBreakpoint, and ScriptDebugListener into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127537

        Reviewed by Timothy Hatcher.

          - Rename ContentSearchUtils => ContentSearchUtilities and move to JavaScriptCore.
          - Move ScriptBreakpoint and ScriptDebugListener to JavaScriptCore.
          - Move them all to namespace Inspector.
          - Update build files and users to the new names.

        No change in functionality, just moving code.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/ContentSearchUtilities.h: Added.
        * ForwardingHeaders/inspector/ScriptBreakpoint.h: Added.
        * ForwardingHeaders/inspector/ScriptDebugListener.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::InspectorStyleSheet::lineEndings):
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Move RegularExpression into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127526

        Reviewed by Geoffrey Garen.

        Update as appropriate for the moved file and namespace
        change for class RegularExpression.

        * CMakeLists.txt:
        * ForwardingHeaders/yarr/RegularExpression.h: Added.
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.h:
        * html/BaseCheckableInputType.cpp:
        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        * html/EmailInputType.cpp:
        (WebCore::isValidEmailAddress):
        * html/InputType.cpp:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::createSearchRegex):
        (WebCore::ContentSearchUtils::countRegularExpressionMatches):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::matches):
        (WebCore::InspectorDebuggerAgent::breakpointActionLog):
        (WebCore::InspectorDebuggerAgent::breakpointActionSound):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResources):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::selectorsFromSource):
        * inspector/WorkerDebuggerAgent.cpp:
        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::matchLabelsAgainstString):
        * page/Frame.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):

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

        IDB: Support IDBObjectStore.clear()
        https://bugs.webkit.org/show_bug.cgi?id=127541
        
        Reviewed by Anders Carlsson.

        The backing store should never be performing callbacks directly:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):

        Instead, the transaction operations should do that themselves:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::ClearObjectStoreOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::ClearObjectStoreOperation::transaction):

2014-01-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15875326> REGRESSION (r162257): Assertion failure (should not be reached) in CSSPreloadScanner::tokenize()
        https://bugs.webkit.org/show_bug.cgi?id=127540

        Reviewed by Anders Carlsson.

        No new tests, because I could not reproduce the bug reliably and I don’t know how to trigger
        it.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan): Check for the DoneParsingImportRules before tokenizing
        a character, not after. This restores the logic from before r162257.

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [iOS] Protect against possbile deadlock by delaying video layer creation
        https://bugs.webkit.org/show_bug.cgi?id=127505

        Reviewed by Eric Carlson.

        Work around a possible deadlock on iOS when creating a media element
        backed by AVFoundation by delaying creation of the AVPlayerLayer.
        The deadlock can occur when the web thread is doing CALayer layout
        while taking the web thread lock, while CoreMedia is doing property
        access on an async thread while taking the CM lock, and each is waiting
        for the other's lock to be released.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash when reloading a page during playback
        https://bugs.webkit.org/show_bug.cgi?id=126903

        Reviewed by Eric Carlson.

        Periodic time observers added to AVSampleBufferRenderSynchronizer will execute their
        callback block even after being removed with -removeTimeObserver:, which is tracked by
        <rdar://problem/15798050>. Work around this problem by passing a WeakPtr into the block
        and bail early if the owning media player has been destroyed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):

2014-01-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Dragging from inner side of video to outside causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=126338

        Reviewed by Jer Noble.

        The crash happens while dragging mouse cursor through timeline control to outside
        of video region. This is beacause media controls are selected with the drag.
        The media controls disappear when mouse cursor goes outside of video though
        the dragging/selection proceeds. If once media controls are hidden, related element
        lose their renderers. However the drag is still under going. it requires shadowPseudoId
        of the selected controls. Untorntunately, SliderThumbElement/SliderContainerElement
        don't return a static value for the shadowPseudoId unlike other media controls,
        but they need a renderer to determine it. This is the reason of crash.

        Test: media/media-controller-drag-crash.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::shadowPseudoId):
        (WebCore::SliderContainerElement::shadowPseudoId):

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

        IDB: Implement SQLite backing store 'get' support
        https://bugs.webkit.org/show_bug.cgi?id=127502

        Reviewed by Tim Horton.

        Get a KeyRange from a KeyRangeData:
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::maybeCreateIDBKeyRange):
        * Modules/indexeddb/IDBKeyRangeData.h:

        Add collation function support to SQLiteDatabase:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::destroyCollationFunction):
        (WebCore::callCollationFunction):
        (WebCore::SQLiteDatabase::setCollationFunction):
        (WebCore::SQLiteDatabase::removeCollationFunction):
        * platform/sql/SQLiteDatabase.h:

        * WebCore.exp.in:

2014-01-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
        <https://bugs.webkit.org/show_bug.cgi?id=126761>
        <rdar://problem/15793540>

        Reviewed by Andy Estes.

        Test: fast/images/animate-list-item-image-assertion.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        Check isRenderImage() rather than isImage() before casting to
        RenderImage.

        * editing/ios/EditorIOS.mm:
        (WebCore::getImage):
        Ditto.

        * editing/mac/EditorMac.mm:
        (WebCore::getImage):
        Ditto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        Ditto.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        Ditto.

        * page/DragController.cpp:
        (WebCore::getCachedImage):
        Ditto.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):
        (WebCore::RenderLayerBacking::updateImageContents):
        Ditto.

2014-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        Remove m_recompileTimer and the recompile soon function.
        We can just recompile immediately in all existing cases.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didAddFirstListener):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        Add a "didAddFirstListener" to match "didRemoveLastListener".
        Only recompile functions when we attach the debugger and when
        we detach the last listener.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        Same thing. Also rearrange the functions to read better.

        * inspector/InspectorProfilerAgent.cpp:
        Use the direct recompile function instead of the removed "soon" version.

        * WebCore.exp.in:
        Update disconnectFrontend symbol.

        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::disconnect):
        * testing/Internals.cpp:
        (WebCore::Internals::closeDummyInspectorFrontend):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        Include an InspectorDisconnectReason when calling disconnectFrontend.

        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        If the disconnect reason is the page will be destroyed, don't recompile when disconnecting.

        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        If the disconnect reason is the page will be destroyed, don't recompile when disconnecting.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::close):
        Pass different reasons for the different disconnect reasons.

        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        Pass different reasons for the different disconnect reasons.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        Include InspectorDisconnectReason param.

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Another Windows fix: include <algorithm> for std::min and std::max.
        
        * platform/graphics/IntSize.h:

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::visibleSize):
        * platform/win/PopupMenuWin.h:

2014-01-23  Simon Fraser  <simon.fraser@apple.com>

        Make visibleContentRect() return actualVisibleContentRect() on iOS most of the time
        https://bugs.webkit.org/show_bug.cgi?id=127456
        
        Reviewed by Antti Koivisto.
        
        On iOS, visibleContentRect() returns the entire document rect for historical
        reasons, and actualVisibleContentRect() returns what visibleContentRect()
        returns on other platforms.
        
        In addition, actualVisibleContentRect() was returning an empty rect in WK2.
        
        Reduce the confusion of #ifdefs by making visibleContentRect() behave like
        actualVisibleContentRect() by default on iOS. Where it needs the old behavior,
        an optional parameter, LegacyIOSDocumentVisibleRect, provides this.
        
        Achieve this by having the virtual ScrollableArea::visibleContentRectInternal(),
        which is called by non-virtual visibleContentRect() and visibleContentRectIncludingScrollbars().
        
        Similarly clean up visibleHeight/visibleWidth functions by having visibleSize() be virtual,
        with non-virtual visibleHeight() and visibleWidth().
        
        ScrollableArea subclasses override visibleContentRectInternal() and visibleSize() where necessary.
        
        Mechanically change all the call sites of actualVisibleContentRect() to
        use visibleContentRect(), and the call sites of visibleContentRect()
        to visibleContentRect(..., LegacyIOSDocumentVisibleRect), adding comments
        where this may not be appropriate.
        
        Change callers of visibleContentRect(IncludeScrollbars...) to visibleContentRectIncludingScrollbars().
        
        Also add actualScrollPosition(), and clean up some actualScroll* call sites.
        
        No behavior change.

        * WebCore.exp.in:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isOnscreen):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        * dom/Document.cpp:
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale):
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::bounds):
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageFitsInWindow):
        (WebCore::ImageDocument::windowSizeChanged):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollBy):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::sendResizeEventIfNeeded):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::paintControlTints):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRectInternal):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        (WebCore::ScrollView::actualScrollPosition):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::visibleContentRect):
        (WebCore::ScrollableArea::visibleContentRectIncludingScrollbars):
        (WebCore::ScrollableArea::visibleContentRectInternal):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::visibleWidth):
        (WebCore::ScrollableArea::visibleHeight):
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::expandedTo): Drive-by cleanup.
        (WebCore::IntSize::shrunkTo):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::visibleContentRectInternal):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::viewRect):
        (WebCore::RenderView::viewportSize):

2014-01-20  Myles C. Maxfield  <mmaxfield@apple.com>

       Turn text-decoration-skip: ink on for all underlines
       https://bugs.webkit.org/show_bug.cgi?id=127331

       Reviewed by Antti Koivisto.

       No new tests are necessary because tests already exist

       * rendering/style/RenderStyle.h:

2014-01-23  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape size and position should conform to the spec
        https://bugs.webkit.org/show_bug.cgi?id=123295

        Reviewed by Andreas Kling.

        Implement image valued shape-outside scaling and translation per the spec,
        http://dev.w3.org/csswg/css-shapes/#shapes-from-image:

        "The image is sized and positioned as if it were a replaced element whose
        specified width and height are the same as the element’s used content box size."

        This change doesn't completely fulfill the spec, it's limited to image elements
        and shape-outside.

        Tests: fast/shapes/shape-outside-floats/shape-outside-image-fit-001.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-002.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-003.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-004.html

        * rendering/shapes/Shape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        Added an imageRect parameter which specifies where the shape image is to
        appear relative to the content box. The imageRect implies both scaling and
        translation of the shape image.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        (WebCore::getShapeImageRect):
        For replaced elements, compute the shape's imageRect with
        RenderReplaced::replacedContentRect().


2014-01-23  Max Vujovic  <mvujovic@adobe.com>

        Remove CSS Custom Filters code and tests
        https://bugs.webkit.org/show_bug.cgi?id=127382

        Reviewed by Simon Fraser.

        No new tests. Removing functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::filterInfoForName):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSPropertyNames.in:
        * css/CSSPropertySourceData.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::filterOperationForType):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/WebKitCSSArrayFunctionValue.cpp: Removed.
        * css/WebKitCSSArrayFunctionValue.h: Removed.
        * css/WebKitCSSFilterRule.cpp: Removed.
        * css/WebKitCSSFilterRule.h: Removed.
        * css/WebKitCSSFilterRule.idl: Removed.
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        (WebCore::WebKitCSSFilterValue::customCSSText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSMatFunctionValue.cpp: Removed.
        * css/WebKitCSSMatFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.cpp: Removed.
        * css/WebKitCSSMixFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.idl: Removed.
        * css/WebKitCSSShaderValue.cpp: Removed.
        * css/WebKitCSSShaderValue.h: Removed.
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedShader.cpp: Removed.
        * loader/cache/CachedShader.h: Removed.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::filtersCanBeComposited):
        * platform/graphics/filters/CustomFilterArrayParameter.h: Removed.
        * platform/graphics/filters/CustomFilterColorParameter.h: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.h: Removed.
        * platform/graphics/filters/CustomFilterConstants.h: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Removed.
        * platform/graphics/filters/CustomFilterMesh.cpp: Removed.
        * platform/graphics/filters/CustomFilterMesh.h: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.cpp: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.h: Removed.
        * platform/graphics/filters/CustomFilterNumberParameter.h: Removed.
        * platform/graphics/filters/CustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/CustomFilterOperation.h: Removed.
        * platform/graphics/filters/CustomFilterParameter.h: Removed.
        * platform/graphics/filters/CustomFilterParameterList.cpp: Removed.
        * platform/graphics/filters/CustomFilterParameterList.h: Removed.
        * platform/graphics/filters/CustomFilterProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgram.h: Removed.
        * platform/graphics/filters/CustomFilterProgramClient.h: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.h: Removed.
        * platform/graphics/filters/CustomFilterRenderer.cpp: Removed.
        * platform/graphics/filters/CustomFilterRenderer.h: Removed.
        * platform/graphics/filters/CustomFilterTransformParameter.h: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.h: Removed.
        * platform/graphics/filters/FECustomFilter.cpp: Removed.
        * platform/graphics/filters/FECustomFilter.h: Removed.
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Removed.
        * platform/graphics/filters/texmap/CustomFilterValidatedProgramTextureMapper.cpp: Removed.
        * platform/graphics/filters/texmap/TextureMapperPlatformCompiledProgram.h: Removed.
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::getPassesRequiredForFilter):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::clearPendingStateChanges):
        (WebCore::CompositingCoordinator::syncLayerState):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::~FilterInfo):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/style/StyleCachedShader.cpp: Removed.
        * rendering/style/StyleCachedShader.h: Removed.
        * rendering/style/StyleCustomFilterProgram.cpp: Removed.
        * rendering/style/StyleCustomFilterProgram.h: Removed.
        * rendering/style/StyleCustomFilterProgramCache.cpp: Removed.
        * rendering/style/StyleCustomFilterProgramCache.h: Removed.
        * rendering/style/StylePendingShader.h: Removed.
        * rendering/style/StyleShader.h: Removed.

2014-01-22  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r161967): Crash in WebCore::CachedSVGDocumentReference::load
        <https://webkit.org/b/127151>
        <rdar://problem/15840760>

        There were two issues introduced here; the first is a use-after-free of
        CachedSVGDocumentReference objects.

        The previous code kept a map from FilterOperation ->
        RefPtr<WebKitCSSSVGDocumentValue>, which retained the
        CachedSVGDocument. In r161967, this was changed to use a weak HashSet,
        which allows stale CachedSVGDocumentReferences in the pending document
        set if the owning FilterOperation is deleted. To fix this, we'll keep a
        vector of RefPtr<FilterOperation> with pending SVG documents.

        The second issue is a null deref in CachedSVGDocumentReference::load();
        CachedResourceLoader::requestSVGDocument() can return 0 if (for
        example) an invalid URL is passed. r161967 removed a null check as part
        of the refactoring.

        Reviewed by Dirk Schulze.

        Tests: css3/filters/crash-filter-animation-invalid-url.html
               css3/filters/crash-invalid-url.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        Use new member var name.
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        For each FilterOperation with a pending SVG document, get or create a
        CachedSVGDocumentReference, and tell it to load. Changed to use new
        function names.
        (WebCore::StyleResolver::createFilterOperations):
        Append the FilterOperation to the list of FilterOperations with
        unloaded SVG documents.

        * css/StyleResolver.h:
        Changed from using PendingSVGDocumentSet, a weak set, to
        a Vector<RefPtr<ReferenceFilterOperation>>.
        (WebCore::StyleResolver::State::filtersWithPendingSVGDocuments):
        Return the vector.

        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        Null check m_document rather than checking m_loadRequested.
        m_loadRequested may be true when m_document is 0.
        (WebCore::CachedSVGDocumentReference::load):
        Null check the result of CachedResourceLoader::requestSVGDocument().

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::getOrCreateCachedSVGDocumentReference):
        Create, if necessary, and return the CachedSVGDocumentReference.

        * platform/graphics/filters/FilterOperation.h:
        Replaced createCachedSVGDocumentReference() with
        getOrCreateCachedSVGDocumentReference(), which makes for slightly
        cleaner code.

2014-01-23  Antti Koivisto  <antti@apple.com>

        Don't enable speculative tiles immediately after main load stops progressing
        https://bugs.webkit.org/show_bug.cgi?id=127507

        Reviewed by Andreas Kling.

        It is common for timers and events to trigger more loading after the initial main frame loading
        has completed. We should delay a bit before enabling speculative tiles and keep them disabled 
        if loading still continues.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::shouldEnableSpeculativeTilingDuringLoading):
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        
            When load progression stops wait 0.5s before enabling speculative tiles.

        (WebCore::FrameView::speculativeTilingEnableTimerFired):
        
            Don't enable speculative tiles if the progression has started again. Instead restart the timer.

        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        
            Move the FrameView level code to FrameView (so we don't need to add a timer to every RenderLayerBacking).

        * rendering/RenderLayerBacking.h:

2014-01-23  Antti Koivisto  <antti@apple.com>

        Loads started soon after main frame completion should be considered part of the main load
        https://bugs.webkit.org/show_bug.cgi?id=127504

        Reviewed by Andreas Kling.

        ProgressTracker currently decides that main load is complete when the main frame stops loading. 
        However it is common that timers and onload events trigger more loads immediately (for example 
        by inserting iframes) and loading continues visually. These should be considered as part of the
        main load for paint throttling and speculative tiling coverage purposes.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        
            Track whether this is considered part of the main load or not with a boolean. 
            It is set for subframe loads too if they start loading soon (within 1s) after the main frame load completes.

        (WebCore::ProgressTracker::finalProgressComplete):
        
            Get a timestamp.

        (WebCore::ProgressTracker::isMainLoadProgressing):

            New definition of "main load".

        * loader/ProgressTracker.h:

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=127499

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceError.h: Include <winsock2.h> before <curl/curl.h>.

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

        IDB: Implement cross-thread and IPC plumbing for 'get' support
        https://bugs.webkit.org/show_bug.cgi?id=127501

        Reviewed by Anders Carlsson.

        Add isolatedCopy to the IDBGetResult object:
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::isolatedCopy):

        Add a cross-thread and cross-IPC appropriate object for IDBKeyRanges:
        * Modules/indexeddb/IDBKeyRangeData.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::isolatedCopy):
        * Modules/indexeddb/IDBKeyRangeData.h: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):

        Add a few more cross-thread copiers:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBGetResult>::copy):
        (WebCore::IDBKeyRangeData>::copy):
        * platform/CrossThreadCopier.h:

        Project file gunk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Adopt new AVStreamDataParser delegate API
        https://bugs.webkit.org/show_bug.cgi?id=127498

        Reviewed by Eric Carlson.

        Adopt a new delegate API which passes in whether or not the new AVAsset
        is discontinuous, implying the AVAsset is entirely new rather than
        just updated with new information.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):

2014-01-23  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Use PDFPlugin even if there's an external plugin installed, if it's blocked
        https://bugs.webkit.org/show_bug.cgi?id=127415
        <rdar://problem/12482452>

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * platform/LocalizedStrings.cpp:
        (WebCore::useBlockedPlugInContextMenuTitle):
        * platform/LocalizedStrings.h:
        Add a localizable string for the generic case, where the client
        didn't provide a more specific string for the context menu item.

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way to specify cache folder.
        https://bugs.webkit.org/show_bug.cgi?id=125028

        Reviewed by Brent Fulgham.

        Fixed logical test, disc cache should be disabled if creating cache folder fails.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::setCacheDirectory):

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

        Unreviewed build fix.

        * WebCore.xcodeproj/project.pbxproj: Export the new header so WebKit can see it

2014-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update project and solution files for 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=127457

        Reviewed by Eric Carlson.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.submit.sln: Add x64 targets
        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013. Also exclude 32-bit specific
        assembly when building 64-bit target.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Update for VS2013
        * config.h: Handle 64-bit type definitions.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::setFromValue): Use CGFloat to support 64-bit builds
        (PlatformCAAnimation::setToValue): Ditto
        (PlatformCAAnimation::setValues): Ditto
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Add cast to
        support 32- and 64-bit targets.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Use CGFloat to
        support 64-bit builds.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURLToDataObject): Specialize std::min to
        work on 32- and 64-bit code.
        (WebCore::createGlobalImageFileDescriptor): Ditto
        * platform/win/StructuredExceptionHandlerSuppressor.cpp:
        (WebCore::StructuredExceptionHandlerSuppressor::StructuredExceptionHandlerSuppressor):
        Comment out 32-bit inline assembly.
        (WebCore::StructuredExceptionHandlerSuppressor::~StructuredExceptionHandlerSuppressor):
        Ditto

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

        Make IDBGetResult work with IDBKeyData instead of IDBKey.
        https://bugs.webkit.org/show_bug.cgi?id=127493

        Reviewed by Eric Carlson.

        Also break it into its own header to work better with IPC messages.

        * Modules/indexeddb/IDBGetResult.h: Added.
        (WebCore::IDBGetResult::IDBGetResult):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):

        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add storage limit to cache manager
        https://bugs.webkit.org/show_bug.cgi?id=125779

        Reviewed by Brent Fulgham.

        Sets a local disc storage size limit for the cache manager
        used by the curl network backend.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::readCachedData):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        (WebCore::CurlCacheEntry::entrySize):
        * platform/network/curl/CurlCacheEntry.h:
        (WebCore::CurlCacheEntry::requestHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::setStorageSizeLimit):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::makeRoomForNewEntry):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::readCachedData):
        * platform/network/curl/CurlCacheManager.h:
        (WebCore::CurlCacheManager::cacheDirectory):

2014-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix automake warning.

        * GNUmakefile.list.am: Remove trailing whitespaces.

2014-01-23  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix positioning composited layers when the region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124042

        Reviewed by Mihnea Ovidenie.

        If there's a clipping GraphicsLayer on the hierarchy, substract its offset, since it's its
        parent that positions us.

        Tests: compositing/regions/position-layer-inside-region-overflow-hidden.html
               compositing/regions/position-layer-inside-overflow-hidden.html
               compositing/regions/position-layers-inside-region-overflow-hidden.html
               compositing/regions/position-layers-inside-regions-overflow-hidden.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): The position
        must also be correct when the region has box-shadow that inflates the region's layer. The
        composited layers from the flow thread should be rendered in the same position whether the
        associated region has clipping or not.
        Using the position of the clipping layer instead of the location of the clipbox makes it
        also work with box-shadow that inflates the region's graphics layer.

2014-01-23  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Convert regions iterator loops to range-based loops
        https://bugs.webkit.org/show_bug.cgi?id=127464

        Reviewed by Antti Koivisto.

        Replace most of the iterator loops in the region implementation with
        range based for loops. The for loops that iterate only over subsets
        of collections have not been changed.

        Tests: no new tests, this is a refactoring patch.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForCSSRegionsHighlight):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::clearContentElements):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::isContainedInElements):
        (WebCore::RenderNamedFlowThread::getRanges):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2014-01-23  László Langó  <llango.u-szeged@partner.samsung.com>

        Range should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115639

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-range
        Now we can do `new Range()` instead of `document.createRange()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/47ca40efdf58a4787aa33aa75a35778899b1c002%5E%21

        Test: fast/dom/Range/range-constructor.html

        * dom/Range.cpp:
        (WebCore::Range::create):
        * dom/Range.h:
        * dom/Range.idl:

2014-01-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for gles after r162565. Add missing definitions.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):

2014-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Use GUniquePtr instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127431

        Reviewed by Martin Robinson.

        GUniquePtr is a template alias of std::unique_ptr with a custom
        deleter that replaces GOwnPtr. GOwnPtr is still used for the cases
        where the output pointer is needed, but it will also be replaced soon.

        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        (accessibilityObjectLength):
        (textExtents):
        (webkitAccessibleTextGetChar):
        (numberOfReplacedElementsBeforeOffset):
        * page/ContextMenuController.cpp:
        * platform/SharedBuffer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcLoop):
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcAddSrc):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getThemeIconFileName):
        (WebCore::Image::loadPlatformResource):
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::itemCount):
        (WebCore::contextMenuItemVector):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::createPlatformMenuItemDescription):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURIList):
        (WebCore::DataObjectGtk::setURL):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString):
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::pathGetFileName):
        (WebCore::applicationDirectoryPath):
        (WebCore::sharedResourcesPath):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        (WebCore::openTemporaryFile):
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.
        * platform/gtk/GUniquePtrGtk.h: Added.
        * platform/gtk/GamepadsGtk.cpp:
        (WebCore::GamepadsGtk::GamepadsGtk):
        * platform/gtk/GtkClickCounter.cpp:
        (WebCore::GtkClickCounter::shouldProcessButtonEvent):
        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents):
        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp):
        (WebCore::GtkPopupMenu::typeAheadFind):
        * platform/gtk/LanguageGtk.cpp:
        (WebCore::platformLanguage):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):
        (WebCore::localizedMediaTimeDescription):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::selectionDataToUTF8String):
        (WebCore::PasteboardHelper::getClipboardContents):
        (WebCore::PasteboardHelper::fillSelectionData):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::createGtkActionForMenuItem):
        (WebCore::PopupMenuGtk::show):
        * platform/gtk/WebKitAuthenticationWidget.cpp:
        (webkitAuthenticationWidgetInitialize):
        * platform/network/ResourceHandleInternal.h:
        * platform/network/gtk/CredentialBackingStore.cpp:
        (WebCore::credentialForChallengeAsyncReadyCallback):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GUniquePtrSoup.h: Added.
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::failingURI):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::createSoupRequestAndMessageForHandle):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers):
        (WebCore::ResourceRequest::updateSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SoupURIUtils.cpp:
        (WebCore::soupURIToKURL):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::clearPlatformData):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::hasPlatformData):
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2014-01-22  Simon Fraser  <simon.fraser@apple.com>

        Surround fixedVisibleContentRect code with USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=127461

        Reviewed by Andreas Kling.

        The "fixedVisibleContentRect" code path is only used by platforms
        which enabled TILED_BACKING_STORE, so to reduce confusion, surround
        this code with #if USE(TILED_BACKING_STORE).

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleSize):

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        ASSERTION FAILED: v.isFixed() in WebCore::RenderStyle::setWordSpacing
        https://bugs.webkit.org/show_bug.cgi?id=126987

        Reviewed by Simon Fraser.

        When "inherit" is specified and there is no parent, Length values have an "Auto" type

        Test: fast/css3-text/css3-word-spacing-percentage/word-spacing-crash.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):

2014-01-22  Samuel White  <samuel_white@apple.com>

        AX: Can't always increment web sliders.
        https://bugs.webkit.org/show_bug.cgi?id=127451

        Reviewed by Chris Fleizach.

        Clamping the decrement/increment amount to one when necessary (if a percent change would result in a change of less than one).

        Test: accessibility/range-alter-by-percent.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::changeValueByPercent):

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove CSS3_TEXT_DECORATION define
        https://bugs.webkit.org/show_bug.cgi?id=127333

        Reviewed by Simon Fraser.

        This is required for unprefixing the text-decoration-* CSS properties.

        No new tests are necessary becase the flag was already on by default.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitTextDecorationShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::boundingBoxForAllActiveDecorations):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::maxLogicalTop):
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-01-22  Chris Fleizach  <cfleizach@apple.com>

        AX: Do not return an accessible name for an object just because it has tabindex=0
        https://bugs.webkit.org/show_bug.cgi?id=126914

        Reviewed by Mario Sanchez Prada.

        WebKit has code to return an accessible name for any object that is "generically" focusable (ie. tabindex=0).
        This behavior, which is not supported in ARIA, has caused many problems for VoiceOver. Often VoiceOver will
        speak all the text underneath any type of group.

        I think we need to revert this behavior and follow the ARIA spec more closely.

        Test: accessibility/aria-describedby-ensures-visibility.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):

2014-01-22  Brady Eidson  <beidson@apple.com>

        The IDB backing store get() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127453

        Reviewed by Beth Dakin.

        * Modules/indexeddb/IDBServerConnection.h:
        (WebCore::IDBGetResult::IDBGetResult): Add a new structure to hold all of the
          possible results of a get() call.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get): Don't call IDBCallbacks directly.
          Instead, return the GetResult to the GetOperation which will make IDBCallbacks.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform): Get all of the IDBGetResults in the completion callback
          make the appropriate IDBCallback.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

2014-01-22  Dean Jackson  <dino@apple.com>

        Unreviewed attempt to fix 32-bit builds.

        Use long long rather than GC3Dintptr.

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::drawElementsInstancedANGLE):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawElementsInstanced):
        * html/canvas/WebGLRenderingContext.h:

2014-01-21  Brady Eidson  <beidson@apple.com>

        IDB: "Put" support
        <rdar://problem/15779643> and https://bugs.webkit.org/show_bug.cgi?id=127401

        Reviewed by Alexey Proskuryakov.

        Add persistent encode/decode for storage to the database:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::encode):
        (WebCore::IDBKey::decode):
        * Modules/indexeddb/IDBKey.h:

        Add a data class to represent IDBKey suitable for crossing IPC:
        * Modules/indexeddb/IDBKeyData.cpp: Added.
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        * Modules/indexeddb/IDBKeyData.h: Added.
        (WebCore::IDBKeyData::IDBKeyData):

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBKeyData>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement ANGLE_instanced_arrays
        https://bugs.webkit.org/show_bug.cgi?id=127257

        Reviewed by Brent Fulgham.

        Implement the instanced drawing WebGL extension,
        ANGLE_instanced_arrays. This is currently Mac-only,
        but should be portable to other platforms if their
        OpenGL exposes the functions. It's also done in a way
        that will make exposing it to WebGL2 simple.

        Test: fast/canvas/webgl/angle-instanced-arrays.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add the new files to all the build systems.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Link JS side to C++ side.

        * html/canvas/ANGLEInstancedArrays.cpp: Added.
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        * html/canvas/ANGLEInstancedArrays.h: Added.
        * html/canvas/ANGLEInstancedArrays.idl: Added.
        New boilerplate files that expose the extension methods.

        * html/canvas/WebGLExtension.h: New extension enum.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateVertexAttributes): Add an optional
        parameter representing the number of instance primitives we are asked
        to draw. Use that for the draw count if looking at an instanced attribute.
        Also make sure we see at least one non-instanced attribute.
        (WebCore::WebGLRenderingContext::validateDrawArrays): Update this so it could
        be used from either drawArrays or drawArraysInstanced.
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::validateDrawElements): Same here, now can be
        used by the instanced and non-instanced versions.
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getExtension): Create and return the new extension.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add new extension to the list.
        (WebCore::WebGLRenderingContext::getVertexAttrib): Intercept a query to the divisor
        attribute and return the value we kept in the state.
        (WebCore::WebGLRenderingContext::drawArraysInstanced): Call the GC3D method.
        (WebCore::WebGLRenderingContext::drawElementsInstanced): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttribDivisor): Ditto.

        * html/canvas/WebGLRenderingContext.h: Define the new methods and parameters.

        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::setVertexAttribDivisor): Keep a record of the
        divisor if we set it.
        * html/canvas/WebGLVertexArrayObjectOES.h:
        (WebCore::WebGLVertexArrayObjectOES::VertexAttribState::VertexAttribState):

        * platform/graphics/GraphicsContext3D.h: New enum.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::drawArraysInstanced): The actual calls into OpenGL.
        (WebCore::GraphicsContext3D::drawElementsInstanced): Ditto.
        (WebCore::GraphicsContext3D::vertexAttribDivisor): Ditto.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Empty implementations
        for non-mac platforms.

        * platform/graphics/ios/GraphicsContext3DIOS.h: Define the iOS names for the
        functions.

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Darin Adler.

        Early subpixel rounding/flooring/ceiling can have unwanted
        side effect on the final pixel value. Delay pixel
        conversions as much as possible.

        Existing test is changed to reflect subpixel functionality.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2014-01-22  Jochen Eisinger  <jochen@chromium.org>

        Add protocolIsInHTTPFamily for strings and use it where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=127336

        Reviewed by Alexey Proskuryakov.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::schemeMatches):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * platform/URL.cpp:
        (WebCore::protocolIsInHTTPFamily):
        * platform/URL.h:

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        Subpixel Layout: SimpleLineLayout needs more position rounding to match InlineFlowBox layout.
        https://bugs.webkit.org/show_bug.cgi?id=127404

        Reviewed by Antti Koivisto.

        In order to produce a CSS pixel perfect layout, SimpleLineLayout needs to
        round line positions to CSS (integral) position similarly to InlineFlowBox.

        Existing tests cover it.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):

2014-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r162534, this caused inspector test failures.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * inspector/InspectorProfilerAgent.cpp:

2014-01-22  peavo@outlook.com  <peavo@outlook.com>

        Crashes in setTextForIterator
        https://bugs.webkit.org/show_bug.cgi?id=127424

        Reviewed by Brent Fulgham.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone): Provide correct buffer size in utext_setup function call.
        (WebCore::uTextLatin1Access): Give correct buffer size to memset call.
        (WebCore::openLatin1UTextProvider): Ditto.

2014-01-22  Jer Noble  <jer.noble@apple.com>

        [Mac] MediaPlayerPrivateMediaSourceAVFObjC::load ASSERTs on lots of tests
        https://bugs.webkit.org/show_bug.cgi?id=127430

        Reviewed by Eric Carlson.

        When other registered media engines cannot load a URL, the engine selection
        will eventually pick MediaPlayerPrivateMediaSourceAVFObjC and ask it to load
        the URL. Instead of ASSERTing here, simply reject the URL by setting the
        network state to FormatError.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):

2014-01-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get EFL and GTK compiling with ACCESSIBILITY disabled
        https://bugs.webkit.org/show_bug.cgi?id=127119

        Reviewed by Mario Sanchez Prada.

        At build time, the compiler was not able to determine which Timer's constructor to call in AXObjectCache when
        ACCESSIBILITY is not enabled, fixing that.
        Also guarding some members in AccessibilityObject that are only being used by EFL and GTK with ACCESSIBILITY.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        * accessibility/AccessibilityObject.h:

2014-01-22  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Refactor calculation of hasRx and hasRy values in SVGPathData
        https://bugs.webkit.org/show_bug.cgi?id=127423

        Reviewed by Darin Adler.

        This is a follow-up on https://bugs.webkit.org/show_bug.cgi?id=127337

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        Remove m_recompileTimer and the recompile soon function.
        We can just recompile immediately in all existing cases.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didAddFirstListener):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        Add a "didAddFirstListener" to match "didRemoveLastListener".
        Only recompile functions when we attach the debugger and when
        we detach the last listener.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        Same thing. Also rearrange the functions to read better.

        * inspector/InspectorProfilerAgent.cpp:
        Use the direct recompile function instead of the removed "soon" version.

2014-01-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL client certificate
        https://bugs.webkit.org/show_bug.cgi?id=125006

        Reviewed by Brent Fulgham.

        Add client certificate handling.

        * platform/network/ResourceHandle.h:
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::hasSSLConnectError):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setClientCertificateInfo):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp:
        (WebCore::addAllowedClientCertificate):
        (WebCore::setSSLClientCertificate):
        * platform/network/curl/SSLHandle.h:

2014-01-22  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] layerOwner in RenderNamedFlowFragment cannot return null
        https://bugs.webkit.org/show_bug.cgi?id=127343

        Reviewed by Sam Weinig.

        RenderNamedFlowFragment::layerOwner cannot return null because regions create stacking
        contexts which create layers.

        No new tests, no functional change.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        * rendering/RenderNamedFlowFragment.h:

2014-01-22  Antti Koivisto  <antti@apple.com>

        Avoid unthrottled layer flushes triggered by RenderLayerCompositor::ensureRootLayer
        https://bugs.webkit.org/show_bug.cgi?id=127426

        Reviewed by Anders Carlsson.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

            Factor scroll layer position update to a function.

        (WebCore::RenderLayerCompositor::ensureRootLayer):
        
            Stop calling frameViewDidChangeSize/frameViewDidScroll. Instead call the relevent functions
            directly. This avoid unthrottled layer flush that is done when the view actually scrolls.

        * rendering/RenderLayerCompositor.h:

2014-01-22  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] -webkit-background-blend-mode fails for certain SVG files
        https://bugs.webkit.org/show_bug.cgi?id=127350

        Reviewed by Dirk Schulze.

        The graphics context of the SVG inherits the blend mode set
        on the background layer. Fix consists in drawing the SVG
        in a transparency layer.

        Test: css3/compositing/background-blend-mode-svg.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Begin a transparency layer if a blend mode is set.

2014-01-22  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect layout of a region pseudo children
        https://bugs.webkit.org/show_bug.cgi?id=126146

        Reviewed by David Hyatt.

        Test: fast/regions/collapse-anonymous-region.html

        A region behaviour, styled using -webkit-flow-from, is modeled using an anonymous
        block created to fragment the named flow content inside the region. We have to prevent
        the behaviour of anonymous children collapsing for this block to make sure that the
        region element children are still laid out properly when the region element becomes an ordinary
        element.

        * rendering/RenderBlockFlow.h:

2014-01-21  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused "acceleratedCompositingForScrollableFramesEnabled" setting
        https://bugs.webkit.org/show_bug.cgi?id=127402

        Reviewed by Anders Carlsson.

        compositing/iframes/iframe-composited-scrolling.html is updated because
        there are no usages in WebCore.

        * page/Settings.in:

2014-01-21  Alex Christensen  <achristensen@webkit.org>

        Compile fix for using libsoup on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=127377

        Reviewed by Daniel Bates.

        * platform/network/soup/ProxyResolverSoup.cpp:
        (soupProxyResolverWkSetProperty):
        (soupProxyResolverWkGetProperty):
        (soupProxyResolverWkGetProxyURISync):
        Replaced uint with unsigned.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Break up single assertion into two assertions in HTMLMediaElement::returnPlatformLayer()

        Following up after <http://trac.webkit.org/changeset/162473>, we should break up
        the assertion into two assertions as suggested by Darin Adler. Separating the single
        assertion into two assertions makes it straightforward to determine the conjunct that
        failed among other benefits.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-21  Brady Eidson  <beidson@apple.com>

        The IDB backing store put() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127399

        Reviewed by Beth Dakin.

        Refactor the put() callback to take a resulting key or an error.
        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform): Call to the backing store, then perform the
          appropriate IDB callback whether a key or an error was returned.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::put): Don’t call IDB callbacks directly.
          Instead, pass the resulting key/error back to the PutOperation.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-21  Jae Hyun Park  <jae.park@company100.net>

        Use nullptr in HTMLCanvasElement
        https://bugs.webkit.org/show_bug.cgi?id=127388

        Reviewed by Gyuyoung Kim.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::drawingContext):
        (WebCore::HTMLCanvasElement::existingDrawingContext):

2014-01-21  László Langó  <llango.u-szeged@partner.samsung.com>

        Assertion failure in Range::nodeWillBeRemoved
        https://bugs.webkit.org/show_bug.cgi?id=121694

        Reviewed by Ryosuke Niwa.

        Based on Blink a change: https://chromium.googlesource.com/chromium/blink/+/407c1d7b2c45974aa614b3f847ffe9e8fce205fa

        This patch fix an assertion failure. Range::nodeWillBeRemoved() might
        be called with removed node in ContainerNode, when DOMNodeRemovedFromDocument
        event handler calls removeChild(), for node being removed.

        Test: fast/dom/Range/remove-twice-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemoveChild):
        * dom/ContainerNode.h:

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r161580): Some PDFs render outside their <img>
        https://bugs.webkit.org/show_bug.cgi?id=127381
        <rdar://problem/15872168>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::transformContextForPainting):
        Only try to make the scale uniform if it isn't already, and use the minimum
        of the two original scales when doing so, so that it is absolutely certain
        to fit inside space allocated for the image during layout.

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Remove #if PLATFORM(IOS) in various places around customFixedPositionLayoutRect() code
        https://bugs.webkit.org/show_bug.cgi?id=127373

        Reviewed by Beth Dakin.

        Instead of PLATFORM(IOS) #idefs at every call site for viewportConstrainedVisibleContentRect(),
        move the #ifdef inside viewportConstrainedVisibleContentRect().
        
        The one call site that needs special handling is RenderLayerBacking::updateCompositedBounds(),
        which needs to avoid clipping fixed layers to the custom fixed position rect, but instead to
        visibleContentRect() (which is really the document bounds on iOS). This ensures that the
        fixed layers aren't clipped when zooming out.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2014-01-21  Andy Estes  <aestes@apple.com>

        [iOS] Allow all clients to link against WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127372
        
        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:

2014-01-21  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Preserve box-shape order when serializing shape values
        https://bugs.webkit.org/show_bug.cgi?id=127200

        Reviewed by Dirk Schulze.

        Convert the parsed shape-box pair to a CSSValueList rather than directly
        adding the box value to BasicShape. The CSSValueList preserves the
        shape-box ordering, and cleans up a little bit of the code shared between
        clip and shape values.

        Modifying existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue): Factor out code common to generating shape
        values.
        (WebCore::ComputedStyleExtractor::propertyValue): Generate a CSSValueList when
        you have both a shape and a box.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeAndOrBox): Factor out code common to clip
        paths and shape properties that parses the [basic-shape || box] syntax from
        the CSS Shapes spec.
        (WebCore::CSSParser::parseShapeProperty): Parse shape-box pairs as a CSSValueList.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Use the CSSValueList for shape-box pairs.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::itemWithoutBoundsCheck): Add a const version.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Specify a box when blending.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createShapeValue): Add a box parameter.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Fix the iOS Simulator release build

        Substitute ASSERT_UNUSED() for ASSERT() to resolve a compiler warning
        that the argument platformLayer is unused. The argument platformLayer
        is only used in the asserted condition, which isn't compiled in a
        release build; => the argument is unused in a release build.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-21  Zoltan Horvath  <zoltan@webkit.org>

        Since MidpointState is a class, it should behave like a class
        https://bugs.webkit.org/show_bug.cgi?id=127154

        Reviewed by David Hyatt.

        I modified MidpointState to behave like a class, updated the call sites also.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::reset):
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::midpoints):
        (WebCore::MidpointState::numMidpoints):
        (WebCore::MidpointState::currentMidpoint):
        (WebCore::MidpointState::incrementCurrentMidpoint):
        (WebCore::MidpointState::decreaseNumMidpoints):
        (WebCore::MidpointState::betweenMidpoints):
        (WebCore::MidpointState::setBetweenMidpoints):
        (WebCore::MidpointState::addMidpoint): Renamed from deprecatedAddMidpoint, since now
        its private, we no longer need to discourage callers from using it.
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::checkMidpoints):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162452.
        http://trac.webkit.org/changeset/162452
        https://bugs.webkit.org/show_bug.cgi?id=127366

        broke a few tests on all Mac WebKit1 bots (Requested by
        thorton on #webkit).

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

2014-01-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Mac: Expose the visible text of a password field to AX
        https://bugs.webkit.org/show_bug.cgi?id=127353

        Reviewed by Brent Fulgham.

        The Mac platform should now expose the rendered value of password fields through AX.

        Test: accessibility/password-field-value.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textLength):
        (WebCore::AccessibilityRenderObject::passwordFieldValue):

2014-01-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        Support SSL error handling in case of synchronous job.
        https://bugs.webkit.org/show_bug.cgi?id=125301

        Reviewed by Brent Fulgham.

        Set ssl error informations for the users.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Export systemTotalMemory() and systemMemoryLevel() for MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=127360

        Reviewed by Andy Estes.
        
        MobileSafari inappropriately calls these WebCore functions directly,
        so export them.

        * WebCore.exp.in:

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up PLATFORM(IOS) code related to the custom fixed position layout rect
        https://bugs.webkit.org/show_bug.cgi?id=127362

        Reviewed by Dave Hyatt.

        Various platforms customize the rect used to layout position:fixed elements,
        and each modified RenderBox::availableLogicalHeight/WidthUsing() in different
        ways.
        
        Clean this up by adding RenderView::clientLogicalWidth/HeightForFixedPosition(),
        and moving the platform hacks into it.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clientLogicalWidthForFixedPosition):
        (WebCore::RenderView::clientLogicalHeightForFixedPosition):
        * rendering/RenderView.h:

2014-01-21  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        ASSERT(time.isFinite()) in SVGSMILElement::createInstanceTimesFromSyncbase
        <https://webkit.org/b/108184>

        Reviewed by Philip Rogers.

        In the case a SMILElement timing had a syncbase dependency on an indefinite value
        the assert were raised. The assert has been removed and a check has been added
        instead that prevents the addition of indefinite times to the time list.

        Test: svg/animations/smil-syncbase-self-dependency.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
          ASSERT removed.

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Address late review naming comments after r162453.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/mac/CALayerWebAdditions.h: Removed.
        * platform/graphics/mac/CALayerWebAdditions.mm: Removed.
        * platform/graphics/mac/WebCoreCALayerExtras.h: Added.
        * platform/graphics/mac/WebCoreCALayerExtras.mm: Added.
        (-[CALayer web_disableAllActions]):

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Keep CALayer implicit animation disabling code in a single place
        https://bugs.webkit.org/show_bug.cgi?id=127355

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        Add CALayerWebAdditions.{h,mm}.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::commonInit):
        Remove nullActionsDictionary() and use [CALayer(WebAdditions) web_disableAllActions] instead.

        * platform/graphics/mac/CALayerWebAdditions.h: Added.
        * platform/graphics/mac/CALayerWebAdditions.mm: Added.
        (-[CALayer web_disableAllActions]):
        Added. Disable all implicit actions on the layer.

2014-01-21  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-21  Lauro Neto  <lauro.neto@openbossa.org>

        Remove PLATFORM(NIX) from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127299

        Reviewed by Anders Carlsson.

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/LocalizedStrings.h:
        * platform/Widget.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFElevation.cpp:
        * platform/cairo/WidgetBackingStore.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::getProcAddress):
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/network/ResourceHandle.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-01-21  Eric Carlson  <eric.carlson@apple.com>

        Add &lrm; &rlm; and &nbsp; to WebVTT parser
        https://bugs.webkit.org/show_bug.cgi?id=85112

        Reviewed by Jer Noble.

        No new tests, track-webvtt-tc022-entities.html was updated to test this.

        * html/track/WebVTTTokenizer.cpp:
        (WebCore::WebVTTTokenizer::nextToken): Support RLM, LRM, and NBSP entities.

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162354.
        http://trac.webkit.org/changeset/162354
        https://bugs.webkit.org/show_bug.cgi?id=127354

        Appears to have broken accessibility in a non-trivial way
        (Requested by ap on #webkit).

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162445.
        http://trac.webkit.org/changeset/162445
        https://bugs.webkit.org/show_bug.cgi?id=127351

        It broke the 32 bit GTK build (Requested by Ossy on #webkit).

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-21  László Langó  <llango.u-szeged@partner.samsung.com>

        Wrong struct size when CSS_IMAGE_ORIENTATION and CSS3_TEXT_DECORATION are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=127346

        Efl build fix.

        Reviewed by Csaba Osztrogonác.

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-21  Antti Koivisto  <antti@apple.com>

        Delay initial layer flush during loading on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=127347

        Reviewed by Andreas Kling.

        To reduce unnecessary repaints enable the same behaviour as iOS already has.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        
            Set the initial state of m_layerFlushThrottlingEnabled correctly.

        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded):
        * rendering/RenderLayerCompositor.h:
        
            Enable initial layer flush delay on all platforms.

2014-01-21  Mihai Tica  <mitica@adobe.com>

        If you set a tiled cross-faded-image or a tiled gradient as
        a background layer, -webkit-background-blend-mode doesn't work.
        The problem consists in the blendMode parameter not being set
        for these specific drawing paths.

        https://bugs.webkit.org/show_bug.cgi?id=126888
        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-tiled-layers.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/ImageBuffer.h: Add a BlendMode parameter to the drawPattern method.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern): Add the default BlendMode parameter to the method declaration.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawPattern): Add and use the blendMode parameter for all the code paths.
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::drawPattern): Add the default BlendMode parameter to the method declaration.

2014-01-21  Gurpreet Kaur  <k.gurpreet@samsung.com>

        The WebCore.vcxproj.filters doesnot apply
        https://bugs.webkit.org/show_bug.cgi?id=127338

        Reviewed by Csaba Osztrogonác.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Modified the WebCore.vcxproj.filters so that it is applied when loading
        WebCore.vcxproj file.

2014-01-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix SVG animations which set rx or ry attributes
        https://bugs.webkit.org/show_bug.cgi?id=127337

        Reviewed by Dirk Schulze.

        Test: svg/stroke/animated-non-scaling-rxry.html

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152376&view=revision

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-flowto through ATK_RELATION_FLOWS_TO
        https://bugs.webkit.org/show_bug.cgi?id=127291

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-flowto.html

        Expose aria-flowto through ATK_RELATION_FLOWS_TO according to
        http://www.w3.org/TR/wai-aria-implementation/#mapping_state-property

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2014-01-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Remove Nix from CMake scripts
        https://bugs.webkit.org/show_bug.cgi?id=127264

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Remove an unused PageGroup function
        https://bugs.webkit.org/show_bug.cgi?id=127327

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        * page/PageGroup.h:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Move user style sheet handling to UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127322
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheets):
        (WebCore::UserContentController::removeAllUserContent):
        (WebCore::UserContentController::invalidateInjectedStyleSheetCacheInAllFrames):
        * page/UserContentController.h:
        (WebCore::UserContentController::userStyleSheets):

2014-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Add a nicer way to iterate over all the attributes of an element
        https://bugs.webkit.org/show_bug.cgi?id=127266

        Reviewed by Geoffrey Garen.

        When using Element::attributeAt() in a loop, the compiler had to generate two kinds of
        accessor:
        -If the element data is unique, the length and data comes from the attribute Vector.
        -If the element data is shared, the data comes from the tail of elementData itself.

        The choice was done for every access, which caused the assembly to be a little
        hard to follow.
        This patch unify the data access by doing everything as a array pointer with offset (getting
        that data from Vector when necessary).

        To make it easier to do the right thing, a new iterator was added so that range-based loops
        can replace all the faulty cases.

        * css/SelectorChecker.cpp:
        (WebCore::anyAttributeMatches):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::checkExactAttribute):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::detachAllAttrNodesFromElement):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (WebCore::Element::attributesIterator):
        * dom/ElementData.cpp:
        (WebCore::ElementData::isEquivalent):
        (WebCore::ElementData::findAttributeIndexByNameSlowCase):
        * dom/ElementData.h:
        (WebCore::AttributeConstIterator::AttributeConstIterator):
        (WebCore::AttributeConstIterator::operator*):
        (WebCore::AttributeConstIterator::operator->):
        (WebCore::AttributeConstIterator::operator++):
        (WebCore::AttributeConstIterator::operator==):
        (WebCore::AttributeConstIterator::operator!=):
        (WebCore::AttributeIteratorAccessor::AttributeIteratorAccessor):
        (WebCore::AttributeIteratorAccessor::begin):
        (WebCore::AttributeIteratorAccessor::end):
        (WebCore::ElementData::attributesIterator):
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::lookupNamespacePrefix):
        (WebCore::Node::compareDocumentPosition):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendElement):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::matchesElement):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2014-01-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Do refactor in collectGradientAttributes() and renderStyleForLengthResolve()
        https://bugs.webkit.org/show_bug.cgi?id=126869

        Reviewed by Dirk Schulze.

        Some SVG functions have done a first iteration by using a boolean flag. This is
        one of poor implementations. This patch fix it by extracting a logic into a new method.
        Additionally it would be good to use do-while() loop instead of using while() in
        renderStyleForLengthResolving() because a first condition is always true.

        Merge r165358 from blink.

        * svg/SVGLengthContext.cpp:
        (WebCore::renderStyleForLengthResolving):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        UserContentController should keep track of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=127317
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Move handling of user scripts from PageGroup to UserContentController.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserScript):
        (WebCore::UserContentController::removeUserScript):
        (WebCore::UserContentController::removeUserScripts):
        (WebCore::UserContentController::removeAllUserContent):
        * page/UserContentController.h:
        (WebCore::UserContentController::userScripts):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Give each page a UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127315
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Add a UserContentController object to PageGroup and have the page group set it on any
        pages that are added to the page group.

        This is another step towards moving handling of user content away from PageGroup and make it
        possible for each page to have different user content.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::setUserContentController):
        * page/Page.h:
        (WebCore::Page::userContentController):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::removePage):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addPage):
        (WebCore::UserContentController::removePage):
        * page/UserContentController.h:

2014-01-20  Jeremy Jones  <jeremyj@apple.com>

        Add AVKit fullscreen video interface.
        https://bugs.webkit.org/show_bug.cgi?id=126818

        Reviewed by Eric Carlson.

        No new tests, no observable change in functionality.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        Add ability for fullscreen to borrow the AVPlayerLayer.
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setMediaPlaybackFullscreenAVKit):
        (WebCore::Settings::mediaPlaybackFullscreenAVKit):
        Add a disabled setting.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen):
        Enabled fullscreen for iOS.
        * platform/ios/WebVideoFullscreenControllerAVKit.h: Added.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm: Added.
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController forwardingTargetForSelector:]):
        (-[WebAVPlayerController shouldDismissForDone]):
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController isPlaying]):
        (-[WebAVPlayerController setPlaying:]):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlaying]):
        (-[WebAVPlayerController seekToTime:]):
        (-[WebAVPlayerController updateTimingWithCurrentTime:]):
        (-[WebAVPlayerController effectiveRate]):
        (-[WebAVPlayerController setMediaElement:]):
        (-[WebAVPlayerController handleEvent:]):
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController setMediaElement:]):
        (-[WebVideoFullscreenController mediaElement]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        Add WebAVPlayerController for HTMLMediaElememt to interface with AVPlayerViewController.

2014-01-20  Zan Dobersek  <zdobersek@igalia.com>

        Replace uses of std::forward<T>(), std::unique_ptr<T>::clear() that landed in r162368
        https://bugs.webkit.org/show_bug.cgi?id=127306

        Reviewed by Darin Adler.

        Address the post-landing reviews of the r162368 commit that moved WebAudio source code to using std::unique_ptr.
        std::move() should be used instead of std::forward<T>() in HRTFKernel::create().
        Instead of calling std::unique_ptr<T>::reset(), nullptr should be assigned to that smart pointer to reset it.

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::uninitialize):
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::set):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Modernize WebCore/inspector with nullptr
        https://bugs.webkit.org/show_bug.cgi?id=127303

        Reviewed by Anders Carlsson.

        Ran clang-modernize -use-nullptr over WebCore/inspector.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::SetOuterHTMLAction::SetOuterHTMLAction):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::discardAgent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::disconnectClient):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::assertDocument):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::frameForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        (WebCore::InspectorInstrumentation::unregisterInstrumentingAgents):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::disable):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::frameForId):
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::buildSourceRangeObject):
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::asProtocolValue):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::page):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::xhrReplayData):
        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::resourceDataForRequestId):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::disable):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::globalState):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Add empty UserContentController class
        https://bugs.webkit.org/show_bug.cgi?id=127300
        <rdar://problem/15861296>

        Reviewed by Dan Bernstein.

        This is the first step towards moving handling of user scripts and style sheets from
        the page group to a separate objects and ultimately make them be settable per page instead of per page group.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/UserContentController.cpp: Added.
        (WebCore::UserContentController::create):
        (WebCore::UserContentController::UserContentController):
        (WebCore::UserContentController::~UserContentController):
        * page/UserContentController.h: Added.

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=127206

        Reviewed by Anders Carlsson.

        Let clang-modernize add overrides.

        * inspector/DOMEditor.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:

2014-01-20  Zan Dobersek  <zdobersek@igalia.com>

        Move WebAudio source code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127274

        Reviewed by Eric Carlson.

        Move from using OwnPtr and PassOwnPtr to using std::unique_ptr and move semantics
        in the WebAudio module and the WebAudio code in the platform layer.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::createKernel):
        (WebCore::BiquadProcessor::getFrequencyResponse):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::uninitialize):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::createKernel):
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::uninitialize):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::createBandLimitedTables):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::setFftSize):
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::createKernel):
        * Modules/webaudio/WaveShaperProcessor.h:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::copyWithGainFrom):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::AudioChannel):
        (WebCore::AudioChannel::set):
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/AudioResampler.h:
        * platform/audio/AudioSession.h:
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::createInterpolatedFrame):
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::HRTFDatabase):
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        (WebCore::HRTFDatabaseLoader::load):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/HRTFElevation.h:
        (WebCore::HRTFElevation::HRTFElevation):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Panner.h:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::AudioSession):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::AudioSession):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: support explicit column breaks
        https://bugs.webkit.org/show_bug.cgi?id=123993

        Reviewed by David Hyatt.

        Merely supporting insertion of explicit (forced) column breaks in
        the region based multicol implementation is really simple: just
        hook up with what the CSS regions code is already doing.

        However, there is one complication: column balancing. In order to
        balance columns as nicely as possible when there are explicit
        breaks, we need to figure out between which explicit breaks the
        implicit breaks will occur (if there's room for any at all).

        Tests: fast/multicol/newmulticol/break-after.html
               fast/multicol/newmulticol/break-before.html
               fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html
               fast/multicol/newmulticol/breaks-2-columns-3.html
               fast/multicol/newmulticol/breaks-3-columns-3.html
               fast/multicol/newmulticol/fixed-height-fill-balance-2.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak): Use the already
        existing region breaking code when inserting breaks in region
        based multicol.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::relayoutForPagination): Avoid
        re-balancing if the multicol's contents were not laid out. Apart
        from being good for performance, this is now necessary because of
        how explicit breaks are implemented.
        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        Detect if the contents are going to be laid out, or skipped, so
        that we can tell if we need to (re-)balance the columns
        afterwards.
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        Locate the appropriate multi-column set and call its
        addForcedBreak().
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::findRunWithTallestColumns):
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks): Figure
        out how many implicit breaks each single "content run" should
        contain. The taller the content run, the more implicit breaks.
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight): This is
        now a const method that only does half of what the old
        calculateBalancedHeight() did. The rest (such as actually storing
        the new column height) is done by recalculateBalancedHeight().
        (WebCore::RenderMultiColumnSet::clearForcedBreaks): Needs to be
        called between each layout pass, to clear the list of "content
        runs".
        (WebCore::RenderMultiColumnSet::addForcedBreak): Only useful when
        columns are to be balanced. It receives explicit (forced) breaks
        and stores them as "content runs". When layout is done, we'll go
        through the list of content runs, and see where implicit breaks
        should be inserted (if there's room for any). The goal is to
        insert implicit breaks in such a way that the final columns become
        as short as possible.
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        Calculates and sets a new balanced column height. This used to be
        done directly in calculateBalancedHeight(), but that method is now
        const and it now only calculates the new height and returns it.
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        * rendering/RenderMultiColumnSet.h: Remove old data members
        intended for forced breaks (they were unused), and introduce a
        "content run" vector instead. A new content run is triggered by an
        explicit break. This is only used when column balancing is
        enabled. When not balanced, RenderMultiColumnSet doesn't need to
        do anything when explicit breaks are inserted.

2014-01-20  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict 'preload' behavior
        https://bugs.webkit.org/show_bug.cgi?id=127297

        Reviewed by Jer Noble.

        Tests: media/video-restricted-no-preload-auto.html
               media/video-restricted-no-preload-metadata.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Apply restrictions to preload attribute before
            passing to media engine.
        (WebCore::HTMLMediaElement::loadResource): Ditto.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::effectivePreloadForElement): New, limit preload according to restrictions.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Limit preload to metadata only. Drive-by
            static deviceClass initialization cleanup.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support MetadataPreloadingNotPermitted and
            AutoPreloadingNotPermitted.

2014-01-20  Andreas Kling  <akling@apple.com>

        Let RenderImage construct its RenderImageResource.
        <https://webkit.org/b/127290>

        Everyone who creates a RenderImage immediately follows up with
        creating a RenderImageResource and assigning it to the image.

        Let the RenderImage constructor do this instead, and make the
        imageResource() accessors return references. This exposed a
        number of unnecessary null checks.

        Also modernized the touched code with std::unique_ptr.

        Reviewed by Antti Koivisto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createElementRenderer):
        (WebCore::HTMLImageElement::didAttachRenderers):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::createInputRenderer):
        (WebCore::ImageInputType::attach):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::styleDidChange):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded):
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderImage::minimumReplacedHeight):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imageResource):
        (WebCore::RenderImage::cachedImage):
        * rendering/RenderImageResource.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createContentRenderer):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::~RenderSVGImage):
        (WebCore::RenderSVGImage::updateImageViewport):
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGImage.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didAttachRenderers):

2014-01-20  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-20  Jochen Eisinger  <jochen@chromium.org>

        Never send a non-http(s) referrer header even with a referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=127172

        Reviewed by Alexey Proskuryakov.

        This mirrors the code SecurityPolicy::shouldHideReferrer which is used
        for ReferrerPolicyDefault.

        No new tests, only affects an embedder that registers other schemes,
        e.g. chrome://

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):

2014-01-20  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

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

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2013-11-22  Sergio Villar Senin  <svillar@igalia.com>

        Null-pointer dereference in WebCore::CSSValue::isPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=124769

        Reviewed by Andreas Kling.

        Test: fast/gradients/crash-on-no-position-separator.html

        The function parseFillPosition() may not return valid values for
        centerX and centerY if the input data is malformed. We need to
        check that we get a valid pair of positions before checking that
        they're actually valid primitive values in the assertions.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseRadialGradient):

2014-01-20  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-20  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: setSimpleLineLayoutEnabled() produces different layout when line position has CSS px fractions.
        https://bugs.webkit.org/show_bug.cgi?id=126892

        Reviewed by Antti Koivisto.

        SimpleLineLayout needs to copy normal linebox layout's subpixel rounding strategy to produce
        the same layout.

        Covered by existing tests.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2014-01-20  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Col width is not honored when dynamically updated and it would make table narrower
        https://bugs.webkit.org/show_bug.cgi?id=104711

        Reviewed by Antti Koivisto.

        Increasing the table width by increasing the colgroup width
        was working but decreasing the table width by decreasing the
        colgroup width is not working.

        Test: fast/dom/HTMLTableColElement/resize-table-width-using-col-width.html

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        When colgroup width is defined table cell should adjust according to
        that. On decreasing colgroup width the cells maxPreferredLogicalWidth
        was still set to the earlier value. Setting the
        setPreferredLogicalWidthsDirty to true so that cells pref width is
        calculated again.

2014-01-20  Edit Balint  <edbalint@inf.u-szeged.hu>

        [CoordinatedGraphics] Segmentation fault at  CoordinatedGraphicsScene::clearImageBackingContents

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

        Reviewed by Csaba Osztrogonác.

        Unexpected behavior occurs in some test cases which leads to segmentation fault.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::removeImageBacking):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: tall line causes taller multicol container than necessary
        https://bugs.webkit.org/show_bug.cgi?id=122550

        Detect and report all column breaks, also when there's no pagination strut involved.

        This may end up becoming the overall smallest space shortage in some cases,
        so we need to report it, to avoid column height over-stretching.

        Reviewed by David Hyatt.

        Test: fast/multicol/newmulticol/balance10.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2014-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] GVariant floating references are not correctly handled by GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=127246

        Reviewed by Martin Robinson.

        Do not adopt GVariant floating references, they will be converted
        to a full reference by GRefPtr.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):

2014-01-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Use unsigned type for the size of CSSParserValueList
        https://bugs.webkit.org/show_bug.cgi?id=127211

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp: Changed variable type from int to unsigned.
        (WebCore::CSSParser::parseValue):

2014-01-19  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r162293

        Fix debug build.

        [ 13%] Building CXX object Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp: In member function ‘void WebCore::HTMLTreeBuilder::processStartTagForInTable(WebCore::AtomicHTMLToken*)’:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: error: no match for ‘operator!’ in ‘!(WebCore::HTMLTreeBuilder::InsertionMode)12’
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: candidate is:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: operator!(bool) <built-in>
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note:   no known conversion for argument 1 from ‘WebCore::HTMLTreeBuilder::InsertionMode’ to ‘bool’
        make[2]: *** [Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o] Error 1
        make[1]: *** [Source/WebCore/CMakeFiles/WebCore.dir/all] Error 2
        make: *** [all] Error 2

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Fix ASSERT.

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Stop using MutexTryLocker in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127254

        Reviewed by Andreas Kling.

        Instead use std::mutex and std::unique_lock with the std::try_to_lock constructor.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        (WebCore::ConvolverNode::reset):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::process):
        (WebCore::MediaElementAudioSourceNode::lock):
        (WebCore::MediaElementAudioSourceNode::unlock):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurve):
        (WebCore::WaveShaperProcessor::setOversample):
        (WebCore::WaveShaperProcessor::process):
        * Modules/webaudio/WaveShaperProcessor.h:

2014-01-19  Alberto Garcia  <berto@igalia.com>

        Does not build with SVG disabled
        https://bugs.webkit.org/show_bug.cgi?id=127248

        Reviewed by Sam Weinig.

        Add missing #if ENABLE(SVG) guard.

        * dom/ElementData.h:

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Use a strong enum for HTMLTreeBuilder::InsertionMode
        https://bugs.webkit.org/show_bug.cgi?id=127252

        Reviewed by Antti Koivisto.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::closeTheCell):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Convert LoaderRunLoopCF.cpp and WebCoreThreadRun.cpp over to modern threading primitives
        https://bugs.webkit.org/show_bug.cgi?id=127251

        Reviewed by Antti Koivisto.

        Also add a condition to the loaderRunLoop() function to protect against spurious wake-ups.

        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoopMutex):
        (WebCore::loaderRunLoopConditionVariable):
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Modernize ReverbConvolver
        https://bugs.webkit.org/show_bug.cgi?id=127250

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr and the STL threading primitives instead of the WTF ones.

        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        (WebCore::ReverbConvolver::process):
        * platform/audio/ReverbConvolver.h:

2014-01-18  Andy Estes  <aestes@apple.com>

        [iOS] Rename GestureEventIOS.{cpp,h} to GestureEvent.{cpp,h} to fix the build

        InFilesCompiler.pm assumes that <interface name>.h exists for each
        interface it processes. We renamed GestureEvent.h to GestureEventIOS.h
        but kept the interface named GestureEvent, so a non-existant file was
        being referenced by InFilesCompiler.pm (this was hard to detect since
        GestureEvent.h still existed in the SDK due to not having submitted
        WebKitAdditions recently).

        Since we cannot rename the GestureEvent interface, and since there is
        no conflicting GestureEvent in open source, we can just rename
        GestureEventIOS.{cpp,h} back to GestureEvent.{cpp,h}.

        * dom/ios/TouchEvents.cpp: Updated to include GestureEvent.cpp.

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        Memory leak in JSSubtleCrypto::wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=127241

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Delete algorithmPtr and parametersPtr that aren't smart pointers because of lambdas.

2014-01-18  Andy Estes  <aestes@apple.com>

        Fix the iOS Production build.

        * Configurations/WebCore.xcconfig:

2014-01-18  Alberto Garcia  <berto@igalia.com>

        [CodeGeneratorJS] Sort output of StructureFlags and function parameters

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

        Reviewed by Alexey Proskuryakov.

        The order of the keys in a hash is undefined and subject to change
        between different Perl versions, so we have to sort them to make
        sure that the output is always the same.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateParametersCheckExpression):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Replace a couple of uses of WTF::Function with std::function
        https://bugs.webkit.org/show_bug.cgi?id=127218

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::dispatchBarrier):
        (WebCore::ScrollingThread::shared):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::initializeRunLoop):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Modernize HTML parser code
        https://bugs.webkit.org/show_bug.cgi?id=127236

        Reviewed by Andreas Kling.

        * html/parser/AtomicHTMLToken.h:
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::releaseNext):
        (WebCore::HTMLElementStack::ElementRecord::setNext):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLParserScheduler.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::takeAndPreload):
        (WebCore::HTMLResourcePreloader::preload):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::releaseDoctypeData):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        * html/parser/HTMLViewSourceParser.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::XSSInfo):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::checkForMetaCharset):
        * loader/TextResourceDecoder.h:

2014-01-18  Benjamin Poulain  <benjamin@webkit.org>

        Make ElementData JIT friendly
        https://bugs.webkit.org/show_bug.cgi?id=127209

        Reviewed by Geoffrey Garen.

        The offsets of ElementData's flags were not accessible by the JIT. This patch
        refactor ElementData to use explicit flags so that they can be used from
        the code generators.

        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::removeAttribute):
        * dom/ElementData.cpp:
        (WebCore::ElementData::destroy):
        (WebCore::ElementData::ElementData):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::ElementData::arraySizeAndFlagsFromOther):
        * dom/ElementData.h:
        (WebCore::ElementData::hasName):
        (WebCore::ElementData::isUnique):
        (WebCore::ElementData::updateFlag):
        (WebCore::ElementData::arraySize):
        (WebCore::ElementData::setHasNameAttribute):
        (WebCore::ElementData::styleAttributeIsDirty):
        (WebCore::ElementData::setStyleAttributeIsDirty):
        (WebCore::ElementData::presentationAttributeStyleIsDirty):
        (WebCore::ElementData::setPresentationAttributeStyleIsDirty):
        (WebCore::ElementData::animatedSVGAttributesAreDirty):
        (WebCore::ElementData::setAnimatedSVGAttributesAreDirty):
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::presentationAttributeStyle):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::synchronizeStyleAttributeInternal):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::StyledElement::presentationAttributeStyle):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):

2014-01-18  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: IntRect::infiniteRect() overflows when subpixel layout is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=126899

        Reviewed by Tim Horton.

        Use LayoutUnits when setting the infinite values on IntRect::infiniteRect() to ensure
        it won't overflow later when the IntRect gets converted to LayoutRect.

        Covered by existing tests.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove support for the viewsource attribute
        https://bugs.webkit.org/show_bug.cgi?id=127232

        Reviewed by Andreas Kling.

        The 'viewsource' attribute on frames is nonstandard, not used by anyone (the inspector has
        its own syntax highlighting) and not audited.

        This patch removes parsing of the viewsource attribute and the associated tests. A subsequent
        patch will remove the code as well.

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

2014-01-18  Anders Carlsson  <andersca@apple.com>

        XMLTreeViewer shouldn't use the view source mode
        https://bugs.webkit.org/show_bug.cgi?id=127229

        Reviewed by Andreas Kling.

        Add the relevant styles from view-source.css to XMLViewer.css.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.css:
        (body):
        (.comment):
        (.tag):
        (.attribute-name):
        (.attribute-value):
        * xml/XMLViewer.js:
        (createComment):
        (createTag):
        (createAttribute):

2014-01-18  Andreas Kling  <akling@apple.com>

        Remove unused "touchDragDropEnabled" setting.
        <https://webkit.org/b/127227>

        Reviewed by Sam Weinig.

        * page/Settings.in:

2014-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: Page should use std::unique_ptr for InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=127068

        Reviewed by Joseph Pecoraro.

        Make Page and WorkerGlobalScope keep a std::unique_ptr to InspectorController
        and WorkerInspectorController. Store page references and return controller
        references where possible.

        Convert call sites to use an InspectorController reference.
        Convert instantiations of InspectorFrontendClient to use std::unique_ptr.
        Convert InspectorOverlay to keep Page references.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * dom/Node.cpp:
        (WebCore::Node::inspect):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::hasInspectorFrontendClient):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::developerExtrasEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowWidth):
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::InspectorOverlay::highlightQuad):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::overlayPage):
        (WebCore::InspectorOverlay::reset):
        * inspector/InspectorOverlay.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::instrumentationForPage): remove null checks.
        (WebCore::instrumentationForWorkerGlobalScope): remove null checks.
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::addInspectElementItem):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::inspectorController):
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::parentProcessIdentifier):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::syncDisplayState):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::emitInspectorDidBeginFrame):
        (WebCore::Internals::emitInspectorDidCancelFrame):
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):
        (WebCore::Internals::setInspectorResourcesDataSizeLimits):
        (WebCore::Internals::setJavaScriptProfilingEnabled):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h: remove clearInspector(). 
        (WebCore::WorkerGlobalScope::workerInspectorController):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::connectToWorkerGlobalScopeInspectorTask):
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        (WebCore::dispatchOnInspectorBackendTask):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_THREADED_HTML_PARSER defines everywhere
        https://bugs.webkit.org/show_bug.cgi?id=127225

        Reviewed by Andreas Kling.

        This concludes the removal of over 8.8 million lines of threaded parser code.

        * Configurations/FeatureDefines.xcconfig:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove the remaining threaded parser code
        https://bugs.webkit.org/show_bug.cgi?id=127224

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * html/parser/AtomicHTMLToken.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::forcePlaintextForTextDocument):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::textPosition):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTokenizer.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::checkLoadComplete):
        * page/Settings.in:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove threaded parser code from the preload scanners
        https://bugs.webkit.org/show_bug.cgi?id=127222

        Reviewed by Andreas Kling.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        Use nullptr.

        (WebCore::CSSPreloadScanner::scan):
        Move scanCommon here and simplify the code.

        * html/parser/CSSPreloadScanner.h:
        Remove scanCommon.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::initiatorFor):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::match):
        Indent this.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::StartTagScanner::charset):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload):
        Ditto.

        (WebCore::TokenPreloadScanner::scan):
        Merge scan and scanCommon.

        * html/parser/HTMLPreloadScanner.h:

2014-01-18  Lauro Neto  <lauro.neto@openbossa.org>

        Remove Nix files from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127176

        Reviewed by Anders Carlsson.

        * PlatformNix.cmake: Removed.
        * css/mediaControlsNix.css: Removed.
        * css/mediaControlsNixFullscreen.css: Removed.
        * editing/nix/EditorNix.cpp: Removed.
        * page/nix/EventHandlerNix.cpp: Removed.
        * platform/audio/nix/AudioBusNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.h: Removed.
        * platform/audio/nix/FFTFrameNix.cpp: Removed.
        * platform/graphics/nix/IconNix.cpp: Removed.
        * platform/graphics/nix/ImageNix.cpp: Removed.
        * platform/nix/CursorNix.cpp: Removed.
        * platform/nix/DragDataNix.cpp: Removed.
        * platform/nix/DragImageNix.cpp: Removed.
        * platform/nix/ErrorsNix.cpp: Removed.
        * platform/nix/ErrorsNix.h: Removed.
        * platform/nix/FileSystemNix.cpp: Removed.
        * platform/nix/GamepadsNix.cpp: Removed.
        * platform/nix/LanguageNix.cpp: Removed.
        * platform/nix/LocalizedStringsNix.cpp: Removed.
        * platform/nix/MIMETypeRegistryNix.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.h: Removed.
        * platform/nix/PasteboardNix.cpp: Removed.
        * platform/nix/PlatformKeyboardEventNix.cpp: Removed.
        * platform/nix/PlatformScreenNix.cpp: Removed.
        * platform/nix/RenderThemeNix.cpp: Removed.
        * platform/nix/RenderThemeNix.h: Removed.
        * platform/nix/ScrollbarThemeNix.cpp: Removed.
        * platform/nix/ScrollbarThemeNix.h: Removed.
        * platform/nix/SharedTimerNix.cpp: Removed.
        * platform/nix/SoundNix.cpp: Removed.
        * platform/nix/TemporaryLinkStubs.cpp: Removed.
        * platform/nix/WidgetNix.cpp: Removed.
        * platform/nix/support/MultiChannelPCMData.cpp: Removed.
        * platform/text/nix/TextBreakIteratorInternalICUNix.cpp: Removed.

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove DocumentParser::pinToMainThread() and related code
        https://bugs.webkit.org/show_bug.cgi?id=127221

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove HTMLParserThread
        https://bugs.webkit.org/show_bug.cgi?id=127220

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLParserThread.cpp: Removed.
        * html/parser/HTMLParserThread.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        GC soon after responding to fake memory pressure.
        <https://webkit.org/b/127210>

        Ask JSC to garbage collect "soon" after handling the fake memory
        pressure signal on Mac. This seems to stabilize the post-pressure
        numbers on Membuster3 a bit on my laptop. The difference is mostly
        made up of JSC::CodeBlock objects.

        Reviewed by Geoffrey Garen.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove files only used by the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=127219
        <rdar://problem/13331277>

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/AtomicHTMLToken.h:
        * html/parser/BackgroundHTMLInputStream.cpp: Removed.
        * html/parser/BackgroundHTMLInputStream.h: Removed.
        * html/parser/BackgroundHTMLParser.cpp: Removed.
        * html/parser/BackgroundHTMLParser.h: Removed.
        * html/parser/CompactHTMLToken.cpp: Removed.
        * html/parser/CompactHTMLToken.h: Removed.
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLIdentifier.cpp: Removed.
        * html/parser/HTMLIdentifier.h: Removed.
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLTreeBuilderSimulator.cpp: Removed.
        * html/parser/HTMLTreeBuilderSimulator.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        Micro-optimize RenderBoxModelObject::computedCSSPadding().
        <https://webkit.org/b/127208>

        Make computedCSSPadding() take the Length as a const reference
        to avoid creating a temporary copy. This was showing up (0.2%)
        on DoYouEvenBench.

        Reviewed by Anders Carlsson.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Add a callOnMainThreadAndWait variant in SocketStreamHandle
        https://bugs.webkit.org/show_bug.cgi?id=127180

        Reviewed by Geoffrey Garen.

        WTF::callOnMainThreadAndWait was only used inside SocketStreamHandleCFNet.cpp, 
        so add an improved version there which is implemented in terms of callOnMainThread and
        with the bonus of handling spurious wake-ups correctly (the old version didn't).

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::callOnMainThreadAndWait):
        (WebCore::SocketStreamHandle::pacExecutionCallback):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Clean up PageCache classes
        https://bugs.webkit.org/show_bug.cgi?id=127202

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::~CachedFrameBase):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::setCachedFramePlatformData):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/CachedPage.h:
        * history/HistoryItem.h:
        (WebCore::HistoryItem::isInPageCache):
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::remove):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):

2014-01-17  Andy Estes  <aestes@apple.com>

        Work around a preprocessor warning in mediaControlsApple.js
        https://bugs.webkit.org/show_bug.cgi?id=127204

        Reviewed by Dan Bernstein.

        * Modules/mediacontrols/mediaControlsApple.js: Changed '' to String().

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162184>
        (https://bugs.webkit.org/show_bug.cgi?id=126856)

        Remove symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(unsigned short const*, int).
        Add symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(WTF::StringView).

        * WebCore.exp.in:

2014-01-17  Andreas Kling  <akling@apple.com>

        Remove unused TOUCH_ADJUSTMENT code.
        <https://webkit.org/b/127181>

        There are no ports using the ENABLE(TOUCH_ADJUSTMENT) feature
        anymore, so nuke it from orbit.

        Reviewed by Anders Carlsson.

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/Settings.in:
        * page/TouchAdjustment.cpp: Removed.
        * page/TouchAdjustment.h: Removed.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-17  Beth Dakin  <bdakin@apple.com>

        Need a way to test the tile cache with margins enabled
        https://bugs.webkit.org/show_bug.cgi?id=127194
        -and corresponding-
        <rdar://problem/15571327>

        Reviewed by Tim Horton.

        This patch adds a new function to InternalSettings that will allow layout tests to 
        flip the setting Settings::setBackgroundShouldExtendBeyondPage(). This patch also         
        makes changing that setting take effect immediately. 

        To make this setting dynamic, we can no longer generate the Setting function, so 
        we have to export the symbol manually.
        * WebCore.exp.in:

        This new function on FrameView will call into RenderLayerBacking to add or remove 
        margins.
        * page/FrameView.cpp:
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        * page/FrameView.h:

        Again, we’re no longer using the boiler-plate generated Setting functions, so now 
        we can call into FrameView to make the background extend.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * page/Settings.h:
        (WebCore::Settings::backgroundShouldExtendBeyondPage):
        * page/Settings.in:

        Whenever tile margins are set, call setNeedsRevalidateTiles() to make the change 
        dynamic.
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setTileMargins):

        Move the call to TiledBacking::setTileMargins() into a helper function so that the 
        same code can be used for FrameView.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        * rendering/RenderLayerBacking.h:

        New InternalSetting.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setBackgroundShouldExtendBeyondPage):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove another unused FrameLoaderClient callback
        https://bugs.webkit.org/show_bug.cgi?id=127192

        Reviewed by Dan Bernstein.

        FrameLoaderClient::dispatchDocumentElementAvailable() was only used by the Chromium port, so remove it.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove FrameLoaderClient::didPerformFirstNavigation()
        https://bugs.webkit.org/show_bug.cgi?id=127191

        Reviewed by Dan Bernstein.

        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListClippedAtTarget):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Move didPerformFirstNavigation() logic to -[WebView _didCommitLoadForFrame:]
        https://bugs.webkit.org/show_bug.cgi?id=127189

        Reviewed by Dan Bernstein.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        Add an empty implementation of didPerformFirstNavigation() to make it easier to remove it from subclasses.

2014-01-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] HTMLMediaSession should set AudioSession category
        https://bugs.webkit.org/show_bug.cgi?id=127137

        Reviewed by Sam Weinig.

        * html/HTMLMediaSession.cpp:
        (WebCore::initializeAudioSession): New, set the audio session to "media" on iOS.
        (WebCore::HTMLMediaSession::HTMLMediaSession): Call initializeAudioSession.

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162178>
        (https://bugs.webkit.org/show_bug.cgi?id=127147)

        Declare WebMediaSessionHelper outside of namespace WebCore to resolve error that
        "Objective-C declarations may only appear in global scope".

        * platform/audio/ios/MediaSessionManagerIOS.mm:

2014-01-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Stacked floats with shape-outside should allow inline content to interact with the non-outermost float
        https://bugs.webkit.org/show_bug.cgi?id=122576

        Reviewed by David Hyatt.

        Make inline content interact with stacked floats with shape-outside
        per the spec. This means that content can interact with floats on the
        line that are not the outermost float.

        This refactors ComputeFloatOffsetAdapter into a superclass and two
        subclasses: one adaptor for determining the offset for float layout,
        and one for determining the offset for inline layout.

        The logic in LineWidth::shrinkAvailableWidthForNewFloatIfNeeded has
        been updated to handle stacked floats with shape-outside properly and
        has been considerably simplified in the process. It was previously
        doing a whole bunch of unnecessary work.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-stacked-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-002.html

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::~ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::~ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::~ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        (WebCore::shapeInfoForFloat):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
        * rendering/shapes/ShapeOutsideInfo.h:

2014-01-17  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3] Add rendering support for -webkit-text-align-last
        https://bugs.webkit.org/show_bug.cgi?id=99584

        Reviewed by David Hyatt.

        Add support for the text-align-last CSS3 property, according to the latest specification:
        http://dev.w3.org/csswg/css-text-3/#text-align-last-property

        Tests: fast/css3-text/css3-text-align-last/text-align-last-with-text-align-justify.html
               fast/css3-text/css3-text-align-last/text-align-last-with-text-align-non-justify.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162208>
        (https://bugs.webkit.org/show_bug.cgi?id=127139)

        __MAC_OS_X_VERSION_MIN_REQUIRED isn't defined when building for iOS. Instead, explicitly
        check that we're not PLATFORM(IOS) to avoid defining the enum value CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain.

        * platform/network/cf/CookieJarCFNet.cpp:

2014-01-17  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Basic shapes' computed position should be a horizontal and vertical offset
        https://bugs.webkit.org/show_bug.cgi?id=127010

        Reviewed by Rob Buis.

        This patch updates the computed position values used for blending to be a horizontal
        left offset and a vertical top offset. When positions include a center, bottom, or
        right position offset, it is converted to the appropriate top/left coordinate as
        a calc expression. Serialized values still use the original bottom/right directions
        when present, and also omit the top/left keywords where possible.

        Updated parsing and animation tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Use the simplified BasicShapeCenterCoordinate,
        which includes an offset and whether the direction is from the top/left or bottom/right.
        (WebCore::valueForBasicShape): Ditto.
        (WebCore::convertToCenterCoordinate): Ditto.
        (WebCore::basicShapeForValue): Ditto.
        (WebCore::floatValueForCenterCoordinate): Ditto.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Remove the RenderBox parameter, which is no longer needed.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCenterCoordinate::updateComputedLength): Calculate the computed
        position offset for this center coordinate.
        (WebCore::BasicShapeRectangle::blend): Remove the RenderBox parameter.
        (WebCore::DeprecatedBasicShapeCircle::blend): Ditto.
        (WebCore::BasicShapeCircle::blend): Ditto.
        (WebCore::DeprecatedBasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapePolygon::blend): Ditto.
        (WebCore::BasicShapeInsetRectangle::blend): Ditto.
        (WebCore::BasicShapeInset::blend): Ditto.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate): Simplify
        BasicShapeCenterCoordinate to contain an offset and a direction. Also add a
        computed length, which is an offset from the top/left direction.
        (WebCore::BasicShapeCenterCoordinate::direction):
        (WebCore::BasicShapeCenterCoordinate::computedLength):
        (WebCore::BasicShapeCenterCoordinate::blend):

2014-01-17  Alexey Proskuryakov  <ap@apple.com>

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:

2014-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix text-emphasis CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=127160

        Reviewed by Sam Weinig.

        Add synonym CSS properties. We don't want to delete the old ones because
        we've shipped with them included.

        Test: fast/css3-text/css3-text-decoration/text-decoration-unprefix.html

        * css/CSSPropertyNames.in:

2014-01-17  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGtk/testcopyandpaste fails in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=127173

        Reviewed by Carlos Garcia Campos.

        Remove duplicate "PasteGlobalSelection" entry.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceRequest harder.
        <https://webkit.org/b/126982>

        Re-arrange the members of ResourceRequest to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):

2014-01-17  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=127166

        Reviewed by Andreas Kling.

        * bindings/js/JSLazyEventListener.h:
        * dom/ContainerNode.h:
        * dom/Document.h:
        * dom/Element.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderElement.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVideo.h:
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * xml/XPathValue.h:

2014-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [ATK] Modernize the for loops in ATK AX code
        https://bugs.webkit.org/show_bug.cgi?id=127120

        Reviewed by Mario Sanchez Prada.

        Update the for loops to be range-based in ATK accessibility code.
        This work is complementary to r161979.

        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityTitle):
        (accessibilityDescription):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (getIndexInParentForCellInRow):

2014-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Soup] Remove unnecessary using-directives for the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=127122

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceRequestSoup.cpp: Remove the unnecessary using-directive for the std namespace
        as no symbols from that namespace are in use in this implementation file.
        * platform/network/soup/ResourceResponseSoup.cpp: Ditto.

2014-01-16  Tim Horton  <timothy_horton@apple.com>

        On iOS, zooming in with a TileController-backed main frame makes hundreds of tiles
        https://bugs.webkit.org/show_bug.cgi?id=126531
        <rdar://problem/15745862>

        Reviewed by Anders Carlsson.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::scaledExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Scale the FrameView-space exposedRect into document space, to match the visibleRect.

        Flipping on WKView's clipsToExposedRect now works correctly even in Safari
        or MiniBrowser with zooming.

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Change all the TextBreakIterator creation functions to take StringViews. Remove a few
        now unnecessary up-conversions to UTF-16 in the process.

        * dom/CharacterData.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/VisibleUnits.cpp:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIterator.h:
        * rendering/RenderText.cpp:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides.

        Rubber-stamped by Sam Weinig.

        * dom/BeforeLoadEvent.h:
        * dom/ClassNodeList.h:
        * dom/Comment.h:
        * dom/CompositionEvent.h:
        * dom/DecodedDataDocumentParser.h:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.h:
        * dom/DocumentMarker.cpp:
        * dom/DocumentType.h:
        * dom/EntityReference.h:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/MessageEvent.h:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.h:
        * dom/NameNodeList.h:
        * dom/Notation.h:
        * dom/OverflowEvent.h:
        * dom/PendingScript.h:
        * dom/PopStateEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptableDocumentParser.h:
        * dom/ScriptedAnimationController.h:
        * dom/StringCallback.cpp:
        * dom/WheelEvent.h:
        * html/FTPDirectoryDocument.h:
        * html/FileInputType.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLDocument.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaKeyEvent.h:
        * html/PluginDocument.cpp:
        * html/RadioNodeList.h:
        * html/TextDocument.h:
        * html/canvas/EXTDrawBuffers.h:
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TrackEvent.h:
        * svg/SVGAElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontData.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathSegArcAbs.h:
        * svg/SVGPathSegArcRel.h:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubicAbs.h:
        * svg/SVGPathSegCurvetoCubicRel.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        * svg/SVGPathSegLinetoAbs.h:
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        * svg/SVGPathSegLinetoHorizontalRel.h:
        * svg/SVGPathSegLinetoRel.h:
        * svg/SVGPathSegLinetoVerticalAbs.h:
        * svg/SVGPathSegLinetoVerticalRel.h:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMovetoAbs.h:
        * svg/SVGPathSegMovetoRel.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGZoomEvent.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImageChromeClient.h:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:

2014-01-16  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r162145): media/video-controls-visible-audio-only.html fails
        https://bugs.webkit.org/show_bug.cgi?id=127147

        Reviewed by Eric Carlson.

        Reset the MediaSessionManager's restrictions to their default values before
        each run.

        Add a new virtual method "resetRestrictions()" so that each port-specific
        MediaSessionManager can reset the restrictions to their default values.
        Call this from Internals::resetToConsistentState() so that tests which change
        the restrictions don't affect later tests.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::resetRestrictions):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::~MediaSessionManager):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2014-01-16  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WinCairo after r162138.
        https://bugs.webkit.org/show_bug.cgi?id=127140

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::extendedBackgroundRect):
        Use unscaledDocumentRect for extendedBackgroundRect without accelerated compositing.

2014-01-16  Brady Eidson  <beidson@apple.com>

        IDB: delete object store support
        <rdar://problem/15779641> and https://bugs.webkit.org/show_bug.cgi?id=127123

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::DeleteObjectStoreOperation::transaction):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/network/cf/CookieJarCFNet.cpp: Remove a spurious semicolon.

2014-01-16  Andy Estes  <aestes@apple.com>

        Another iOS build fix.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::m_objcObserver):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [iOS] Add support for CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=127139

        Reviewed by Brady Eidson.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Pass first party URL down, because reading cookies depends on it when this policy
        in in action.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        Use a new CFNetwork API that takes first party URL.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        Pass first party URL (and null in deleteCookie, as there is none).

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Removed a call to shouldRelaxThirdPartyCookiePolicy(), which no longer exists
        in trunk.

2014-01-16  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r162150.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-01-16  Dean Jackson  <dino@apple.com>

        glReadPixels should use UNSIGNED_BYTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127148

        Reviewed by Benjamin Poulain.

        We were incorrectly mapping GL_UNSIGNED_INT_8_8_8_8_REV to
        GL_RGBA on iOS. It's only used in glReadPixels, so should
        be GL_UNSIGNED_BYTE.

        This is covered by lots of tests in the Khronos test suite,
        that now pass on iOS.

        * platform/graphics/ios/GraphicsContext3DIOS.h:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Change all uses of FINAL to final now that all our compilers support it
        https://bugs.webkit.org/show_bug.cgi?id=127142

        Reviewed by Benjamin Poulain.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/notifications/Notification.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/websockets/WebSocket.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSCanvasValue.h:
        * css/CSSFontSelector.h:
        * css/CSSStyleSheet.h:
        * dom/Attr.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/Comment.h:
        * dom/DatasetDOMStringMap.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentType.h:
        * dom/Element.h:
        * dom/EntityReference.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/Node.h:
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/PseudoElement.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/WebKitNamedFlow.h:
        * editing/ios/EditorIOS.mm:
        * editing/mac/EditorMac.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/FileReader.h:
        * html/ClassList.h:
        * html/DOMSettableTokenList.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAllCollection.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBDIElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDataListElement.h:
        * html/HTMLDetailsElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaFragmentURIParser.h:
        * html/PluginDocument.cpp:
        * html/PluginDocument.h:
        * html/RangeInputType.h:
        * html/TextDocument.h:
        * html/parser/TextDocumentParser.h:
        * html/parser/TextViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TrackListBase.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.h:
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLSelectElement.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/MainFrame.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * platform/ClockGeneric.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * workers/AbstractWorker.h:
        * workers/SharedWorker.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

2014-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Draw all underline segments in a particular run in the same call
        https://bugs.webkit.org/show_bug.cgi?id=127082

        Reviewed by Simon Fraser.

        Instead of running CGContextFillRect() in a loop, we can instead call CGContextFillRects()

        In my tests, this seems to have about 0.5% speedup.

        This patch creates some redundant code, but I think that refactoring would make the code
        much less readable. I also am hesitant to make drawLineForText call drawLinesForText because
        of the overhead of the vector that would be needed.

        As there is no behavior change, no new tests are necessary

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):

2014-01-16  Brady Eidson  <beidson@apple.com>

        Use KeyedCoding as a persistent storage mechanism for blobs
        https://bugs.webkit.org/show_bug.cgi?id=127012

        Reviewed by Anders Carlsson.

        Add basic KeyedDecoder interface that is the inverse of KeyedEncoder:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeVerifiedEnum):
        (WebCore::KeyedDecoder::decodeObject):
        (WebCore::KeyedDecoder::decodeObjects):

        Use KeyedEncoder/Decoder to encode/decode IDBKeyPath:
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IDBKeyPath.h:

        * WebCore.exp.in:

2014-01-16  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict inline <video> playback
        https://bugs.webkit.org/show_bug.cgi?id=127113

        Reviewed by Jer Noble.

        Test: media/video-fullscreeen-only-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Drive-by change to not tell the media session that
            playback is starting if the media player is already playing. Enter fullscreen if the media
            session says it is required.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::clientWillBeginPlayback): Make it const.
        (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback): New, see if the specified
            media element must be played in fullscreen based on the media session settings, document
            settings, and attributes.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.h: pauseSession shouldn't be virtual.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Return immediately if ConcurrentPlaybackNotPermitted
            is not set.
        (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback): New.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::MediaSessionManageriOS): Set InlineVideoPlaybackRestricted if
            running on an iPhone or iPod class device.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support InlineVideoPlaybackRestricted.

2014-01-16  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Timothy Horton.

        Rename webGLPolicyForSite to webGLPolicyForURL.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForURL):

2014-01-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Guarding HTMLMediaSession with ENABLE(VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=127126

        Reviewed by Eric Carlson.

        No new tests needed.

        * html/HTMLMediaSession.cpp:
        * html/HTMLMediaSession.h:

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/indieui/UIRequestEvent.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaConstraintsImpl.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * Modules/mediastream/RTCStatsResponse.h:
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/networkinfo/NetworkInfoConnection.h:
        * Modules/notifications/DOMWindowNotifications.h:
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/speech/SpeechRecognition.h:
        * Modules/speech/SpeechRecognitionError.h:
        * Modules/speech/SpeechRecognitionEvent.h:
        * Modules/speech/SpeechSynthesis.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeInput.h:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/BiquadDSPKernel.h:
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayDSPKernel.h:
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/websockets/CloseEvent.h:
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/JSMutationCallback.h:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/runtime_root.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSBasicShapes.h:
        * css/CSSCanvasValue.h:
        * css/CSSCharsetRule.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceRule.h:
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSHostRule.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.h:
        * css/CSSSupportsRule.h:
        * css/CSSUnknownRule.h:
        * css/FontLoader.cpp:
        * css/FontLoader.h:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSFilterRule.h:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSViewportRule.h:
        * dom/Attr.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/ClipboardEvent.h:
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentFragment.h:
        * dom/Element.h:
        * dom/ErrorEvent.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/KeyboardEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/MutationRecord.cpp:
        * dom/Node.h:
        * dom/PageTransitionEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ProgressEvent.h:
        * dom/PseudoElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TagNodeList.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/TextEvent.h:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.h:
        * dom/UIEvent.h:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitNamedFlow.h:
        * dom/WebKitTransitionEvent.h:
        * editing/AppendNodeCommand.h:
        * editing/ApplyBlockElementCommand.h:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.h:
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionCommand.h:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/ios/EditorIOS.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/File.h:
        * fileapi/FileReader.h:
        * fileapi/FileThreadTask.h:
        * history/BackForwardList.h:
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.h:
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/BaseClickableWithKeyInputType.h:
        * html/BaseDateAndTimeInputType.h:
        * html/BaseTextInputType.h:
        * html/ButtonInputType.h:
        * html/CheckboxInputType.h:
        * html/ClassList.h:
        * html/ColorInputType.h:
        * html/DOMSettableTokenList.h:
        * html/DateInputType.h:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.h:
        * html/EmailInputType.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.h:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDetailsElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.h:
        * html/HTMLMediaSource.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HiddenInputType.h:
        * html/ImageDocument.cpp:
        * html/ImageInputType.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MonthInputType.h:
        * html/NumberInputType.h:
        * html/PasswordInputType.h:
        * html/PluginDocument.h:
        * html/RadioInputType.h:
        * html/RangeInputType.h:
        * html/ResetInputType.h:
        * html/SearchInputType.h:
        * html/SubmitInputType.h:
        * html/TelephoneInputType.h:
        * html/TextFieldInputType.h:
        * html/TextInputType.h:
        * html/TimeInputType.h:
        * html/URLInputType.h:
        * html/WeekInputType.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/TextDocumentParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/InsertionPoint.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MediaControlsGtk.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrackList.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.h:
        * html/track/VideoTrack.h:
        * html/track/VideoTrackList.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.h:
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameNetworkingContext.h:
        * loader/ImageLoader.h:
        * loader/NavigationScheduler.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedImageClient.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.h:
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Chrome.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * pdf/ios/PDFDocument.cpp:
        * pdf/ios/PDFDocument.h:
        * platform/CalculationValue.h:
        * platform/ClockGeneric.h:
        * platform/MainThreadTask.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/RefCountedSupplement.h:
        * platform/ScrollView.h:
        * platform/Scrollbar.h:
        * platform/Timer.h:
        * platform/animation/TimingFunction.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/HRTFPanner.h:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/nix/AudioDestinationNix.h:
        * platform/efl/RenderThemeEfl.h:
        * platform/efl/ScrollbarEfl.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/egl/GLContextFromCurrentEGL.h:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/TextTrackRepresentationIOS.h:
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/egl/EGLContext.h:
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/egl/EGLXSurface.h:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/DeviceMotionClientMock.h:
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/nix/RenderThemeNix.h:
        * platform/nix/ScrollbarThemeNix.h:
        * platform/text/LocaleICU.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * platform/text/mac/LocaleMac.h:
        * platform/text/win/LocaleWin.h:
        * platform/win/PopupMenuWin.h:
        * plugins/PluginView.h:
        * rendering/AutoTableLayout.h:
        * rendering/ClipPathOperation.h:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/FixedTableLayout.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StylePendingImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * storage/StorageAreaImpl.h:
        * storage/StorageNamespaceImpl.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGElementInstance.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGGraphicsElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGTransformable.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGPropertyTearOff.h:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        * testing/MockCDM.cpp:
        * testing/MockCDM.h:
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.h:
        * workers/SharedWorker.h:
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

2014-01-16  Beth Dakin  <bdakin@apple.com>

        Speculative Win Cairo build fix.

        These need to be inside an ifdef.
        * page/FrameView.cpp:
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):

2014-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        text-emphasis-position CSS property doesn't recognize 'left' and 'right'
        https://bugs.webkit.org/show_bug.cgi?id=126611

        Reviewed by Simon Fraser.

        This patch allows the text-emphasis-position to accept the "left" and
        "right" CSS values. In horizontal writing modes, these values no not
        change behavior. In vertical writing modes, however, these values specify
        which side to place the emphasis mark. Similarly, in vertical writing
        modes, the "above" and "below" values should not change behavior.

        However, in order to keep existing behavior, if neither "left" nor "right"
        is specified, we should draw as if the appropriate value were
        specified ("over" -> "right" and "under" -> "left"). Note that this
        will have to be updated when we implement the
        "text-orientation: sideways-left" CSS property.

        Tests: fast/text/emphasis-horizontal-left-right.html
               fast/text/emphasis-vertical-over-right.html
               fast/text/emphasis-vertical-over-under.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextEmphasisPosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::valueToEmphasisPosition):
        (WebCore::ApplyPropertyTextEmphasisPosition::applyValue):
        (WebCore::ApplyPropertyTextEmphasisPosition::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuOpenedNotification
        https://bugs.webkit.org/show_bug.cgi?id=126993

        Reviewed by Mario Sanchez Prada.

        To monitor for menu open notifications, we need to know which children are added to
        the render tree, so the childrenChanged() method has been updated to allow for that.
        Once we know the new child, we can then check what kind of role it has.

        I also found a flakiness issue with DRT where posting a notification back to DRT
        would sometimes cause a new notification to be queued, which would then be lost when the
        queue was cleared. This was fixed by copying the notifications to post before iterating them.

        Test: platform/mac/accessibility/aria-menu-open-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::checkForOpenMenu):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::childrenChanged):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::styleWillChange):

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuItemSelectedNotification
        https://bugs.webkit.org/show_bug.cgi?id=127081

        Reviewed by Mario Sanchez Prada.

        Monitor for when a menu item either gains focus() or has aria-selected set,
        in which case, we need to fire a specific notification.

        Test: platform/mac/accessibility/aria-menu-item-selected-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
            This method was declared in the header, but never implemented, leading to compilation issues.
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
            Allow the core class to handle focus changes first, then pass off to platform
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
            Allow menu items to expose a description attribute.

2014-01-16  Andy Estes  <aestes@apple.com>

        [iOS] Fix build issues with exported headers

        * Configurations/WebCore.xcconfig: Allowed UIKit to link against
        WebCore.
        * page/ios/WebEventRegion.h: Removed ENABLE(TOUCH_EVENTS), which are
        always enabled on iOS.

2014-01-16  Dirk Schulze  <krit@webkit.org>

        Rename functions in SVGDocumentExtension
        https://bugs.webkit.org/show_bug.cgi?id=127046

        Reviewed by Sam Weinig.

        Change some function names in SVGDocumentExtension
        to make them more descriptive.

        Simple refactoring. No new tests.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isIdOfPendingResource):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval):
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemovalMap): The name is not great but a bit more descriptive.
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):

2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
        https://bugs.webkit.org/show_bug.cgi?id=127047

        Reviewed by Martin Robinson.

        Using PrintContext, Frame and DocumentLoader in platform is a
        layering violation.
        Change printing error methods to receive a failing URL instead of
        receiving a PrintContext that was used only to get the failing
        URL.

        * platform/efl/ErrorsEfl.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/efl/ErrorsEfl.h:
        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/gtk/ErrorsGtk.h:
        * platform/nix/ErrorsNix.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/nix/ErrorsNix.h:

2014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Enable accelerated compositing for fixed elements in named flows
        https://bugs.webkit.org/show_bug.cgi?id=125144

        Reviewed by David Hyatt.

        Add support for compositing for fixed positioned element that are collected
        inside a named flow. Prior to this patch, the fixed positioned elements were
        positioned and sized properly but only in the non-compositing scenario.

        Tests: compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html
               compositing/regions/fixed-in-diff-named-flows-zIndex.html
               compositing/regions/fixed-in-named-flow-clip-descendant.html
               compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html
               compositing/regions/fixed-in-named-flow-from-outflow.html
               compositing/regions/fixed-in-named-flow-got-transformed-parent.html
               compositing/regions/fixed-in-named-flow-lost-transformed-parent.html
               compositing/regions/fixed-in-named-flow-overlap-composited.html
               compositing/regions/fixed-in-named-flow-position-changed.html
               compositing/regions/fixed-in-named-flow-transformed-parent.html
               compositing/regions/fixed-in-named-flow-zIndex.html
               compositing/regions/fixed-in-named-flow.html
               compositing/regions/fixed-transformed-in-named-flow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:

2014-01-15  Benjamin Poulain  <bpoulain@apple.com>

        Fix the iOS build after r162114

        Unreviewed.

        * WebCore.exp.in: Move the symbol to the right section and add the missing symbols for iOS.

2014-01-15  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix painting when the composited region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124887

        Reviewed by Alexandru Chiculita.

        When the layer of the region is composited, the region receives a GraphicsLayer of its own
        so the clipping coordinates (caused by overflow:hidden) must be relative to the
        GraphicsLayer coordinates in which the region gets painted.

        Also, while the painting is done relative to the location of the region's content box, the
        clipping is bound to the padding box of the region.

        Tests: compositing/regions/paint-inside-composited-region-overflow-hidden-versus-div.html
               compositing/regions/paint-inside-composited-region-overflow-hidden-versus-region.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFlowThreadIfRegion):

2014-01-15  Benjamin Poulain  <bpoulain@apple.com>

        Move user agent code to WebCore and unify some code between OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=127080

        Reviewed by Sam Weinig.

        Move the duplicated code from WebView and WebPageProxy to two files
        in WebCore: UserAgentMac and UserAgentIOS.

        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ios/UserAgentIOS.mm: Added.
        (WebCore::platformSystemRootDirectory):
        (WebCore::osMarketingVersion):
        (WebCore::standardUserAgentWithApplicationName):
        * page/mac/UserAgent.h: Added.
        * page/mac/UserAgentMac.mm: Added.
        (WebCore::systemMarketingVersionForUserAgentString):
        (WebCore::standardUserAgentWithApplicationName):
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * platform/text/TextAllInOne.cpp:

2014-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Clean up REMOTE_INSPECTOR code in OpenSource after the iOS merge
        https://bugs.webkit.org/show_bug.cgi?id=127069

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Move the contents of TextBreakIteratorICU.cpp to TextBreakIterator.cpp and remove TextBreakIteratorICU.cpp.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIteratorICU.cpp: Removed.

2014-01-15  Eric Carlson  <eric.carlson@apple.com>

        MediaSessionManager shouldn't use std::map
        https://bugs.webkit.org/show_bug.cgi?id=127003

        Reviewed by Sam Weinig.

        No new tests, no functional change.

        Use an array instead of std::map.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::addRestriction):
        (WebCore::MediaSessionManager::removeRestriction):
        (WebCore::MediaSessionManager::restrictions):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        * platform/audio/MediaSessionManager.h:

2014-01-15  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Unreviewed rollout, this caused a regression.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

2014-01-15  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Resizing and entering/exiting full screen draws garbage
        https://bugs.webkit.org/show_bug.cgi?id=127077

        Reviewed by Dean Jackson.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs): Simplified logic regarding FBO switching.
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Make sure a few things
        are turned off that might affect blitting data from one FBO to another.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Actually turn dithering off!
        (WebCore::GraphicsContext3D::reshape): Mark the context as dirty when resizing so that
        the GL view is redrawn during resizing events.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Remove unnecessary call to webGLContextCreated
        https://bugs.webkit.org/show_bug.cgi?id=127000

        Reviewed by Brent Fulgham.

        Note that the functionality of webGLContextCreated will be handled by webGLPolicyForSite now.

        Tests: Unskipping tests skipped in r162002.

        * html/HTMLCanvasElement.cpp: Remove webGLContextCreated call.
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        Have the returned load policy default to WebGLAllow so as to not break clients that don't implement the method.
        (WebCore::FrameLoaderClient::webGLPolicyForSite):
        webGLPolicyForSite is now assuming the role of webGLContextCreated as well, pass in the whole site URL instead of just the host.
        * page/ChromeClient.h: Remove webGLContextCreated method.
        (WebCore::ChromeClient::decrementActivePageCount):

2014-01-15  Beth Dakin  <bdakin@apple.com>

        Repeating background images should continue into margin tiles
        https://bugs.webkit.org/show_bug.cgi?id=127021
        -and corresponding-
        <rdar://problem/15571300>

        Reviewed by Simon Fraser.

        This patch makes repeating background images continue into margin tiles. 

        RenderObject::repaintRectangle() now takes an addition bool parameter which 
        indicates whether or not the repaint rect should be clipped to the layer size.
        * WebCore.exp.in:

        These new functions on FrameView provide a way for code in the render tree to know 
        if the TiledBacking has a margin. tiledBacking() is now const. It should have 
        always been const, and it needs to be const to make these new functions const.
        * page/FrameView.cpp:
        (WebCore::FrameView::tiledBacking):
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::tiledBacking):

        If we’re painting the root background and it is an extended background, we need to 
        inflate the repaint rect to span the extended background. 
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

        To get the phase right on repeated background images on a page with margin tiles, 
        we need to make sure we factor the size of the margin tiles into the left and top 
        values that we use when calculating background image geometry.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        setBackingNeedsRepaintInRect() now takes GraphicsLayer::ShouldClipToLayer as a 
        parameter, just like setBackingNeedsRepaint(). 
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

        setContentsNeedDisplayInRect() also takes a GraphicsLayer::ShouldClipToLayer now, 
        and it passes that information down to the GraphicsLayer.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:

        These two RenderObject functions now take an optional bool parameter which 
        indicates whether or not the rect should be clipped to the layer size. They use a 
        bool instead of the GraphicsLayer enum in order to avoid including GraphicsLayer.h 
        from within RenderObject.h. This seems like a simpler solution than adding a new 
        stand-alone file for this very simple enum.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaintRectangle):
        * rendering/RenderObject.h:

        RenderView::backgroundRect needs to return the extendedBackgroundRect when it had 
        one.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::backgroundRect):

2014-01-15  Brian Burg  <bburg@apple.com>

        Web Inspector: capture probe samples on the backend
        https://bugs.webkit.org/show_bug.cgi?id=126668

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/debugger/setProbe-multiple-actions.html

        Add the probe breakpoint action type. A probe action
        evaluates an expression on the script call frame, and
        the result is aggregated on a per-probe basis. Each
        evaluated expression result is called a probe sample.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction): Teach
        the debug server to evaluate a probe.

        (WebCore::ScriptDebugServer::dispatchDidSampleProbe): Added.
        (WebCore::ScriptDebugServer::handleBreakpointHit): Increment a hit count.
        (WebCore::ScriptDebugServer::getActionsForBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::objectGroupForBreakpointAction): Added. Create an object
        group for each breakpoint action. Currently only probes make objects.
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enable): Remove stale comment.
        (WebCore::breakpointActionTypeForString): Add new case.
        (WebCore::InspectorDebuggerAgent::breakpointActionsFromProtocol): Make
        this a member function instead of a static function, so it can increment
        the breakpoint action identifier counter.
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::setBreakpoint): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::removeBreakpoint): Release object
        groups for any actions that were associated with the removed breakpoint.
        (WebCore::InspectorDebuggerAgent::didSampleProbe): Added.
        (WebCore::InspectorDebuggerAgent::clearResolvedBreakpointState): Renamed from clear().
        (WebCore::InspectorDebuggerAgent::didClearGlobalObject): Renamed from reset().
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpointAction::ScriptBreakpointAction): Add identifier member.
        * inspector/ScriptDebugListener.h:

2014-01-15  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Validation function for compressed formats incorrect
        https://bugs.webkit.org/show_bug.cgi?id=127023

        Reviewed by Dean Jackson.

        No new tests. Covered by existing WebGL compressed texture tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData): Revise to match specifications.

2014-01-15  Andreas Kling  <akling@apple.com>

        Remove the CSS selector profiler.
        <https://webkit.org/b/127039>

        The selector profiler was painting a mostly fictional picture of what
        selectors we were spending time on. It never really grokked the fast
        path selectors, nor did it understand recent additions like the extra
        cascading pass or the selector JIT.

        Somewhat ironically, this may end up making some selectors run faster
        since it removes a number of brances in hot code.

        Reviewed by Sam Weinig.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/protocol/CSS.json:

2014-01-15  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Chris Fleizach.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162066.
        http://trac.webkit.org/changeset/162066
        https://bugs.webkit.org/show_bug.cgi?id=127056

        The added test still fails on some bots (Requested by ap on
        #webkit).

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix intialization order of ResourceResponse constructor

        Fixes the following build failure:

            WebCore/platform/network/mac/ResourceResponseMac.mm:83:7: error: field 'm_nsResponse' will be initialized after field 'm_initLevel' [-Werror,-Wreorder]
                , m_nsResponse(nsResponse)
                  ^

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::ResourceResponse): Reorder member
        initializers to match the order that they are defined in the
        header.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Comment out part of r162036 which broke WebGL on many ports.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2014-01-15  Zoltan Horvath  <zoltan@webkit.org>

        WordMeasurement is a struct, not a class
        https://bugs.webkit.org/show_bug.cgi?id=125373

        Reviewed by Anders Carlsson.

        Change class to struct, because there is no reason for WordMeasurement to be a class.

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:

2014-01-15  Mihai Tica  <mitica@adobe.com>

        Reapplying:
        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-15  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Hit-testing goes through clipped layer in fast/regions/overflow-first-and-last-regions-in-container-hidden.html
        https://bugs.webkit.org/show_bug.cgi?id=126886

        Reviewed by Mihnea Ovidenie.

        Currently, when hit testing a location inside a flow thread we ignore the clipping rectangle of
        the region. This leads to false positives when the location is over the clipped out content of a
        flow thread. The patch verifies that the location is inside the clipping rectangle of the region before
        forwarding the hit test verification to the flow thread layer.

        Test: fast/regions/hover-and-js-in-visual-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):

2014-01-15  Antti Koivisto  <antti@apple.com>

        Suspend resource requests during computedStyle
        https://bugs.webkit.org/show_bug.cgi?id=127034

        Reviewed by Andreas Kling.

        We have some cases where getting computed style leads to crashes in loadPendingImages. 
        This is probably caused by load callbacks resulting in re-entering WebKit and killing the StyleResolver.
        
        As a speculative fix suspend resource loads (and so callbacks) when getting the computed style.
        We do similar suspension during style recalc for the same reason.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::Suspender::Suspender):
        (WebCore::ResourceLoadScheduler::Suspender::~Suspender):

2014-01-15  László Langó  <llango.u-szeged@partner.samsung.com>

        DocumentFragment should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115641

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-documentfragment
        This allows us to do `new DocumentFragment` instead of
        `document.createDocumentFragment()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/86855c44a5a127716840fb377281b1c428e5eb2d%5E%21

        Test: fast/dom/DocumentFragment/document-fragment-constructor.html

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create):
        * dom/DocumentFragment.h:
        * dom/DocumentFragment.idl:

2014-01-14  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r161980.

        CachedResourcesLoader.h should not belong to the CSS_SHADERS flag since it is used
        out of the flag so it causes a compile failure when svg and css shaders are concurrently disabled.

        * css/StyleResolver.cpp:

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceResponse harder.
        <https://webkit.org/b/127005>

        Re-arrange the members of ResourceResponse to reduce padding,
        shrinking it by 8 bytes.

        This nudges CachedResource and CachedImage into smaller size
        classes, yielding a ~700 kB progression on Membuster3.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Remove unnecessary WebkitCSSSVGDocumentValue
        https://bugs.webkit.org/show_bug.cgi?id=126997

        Reviewed by Andreas Kling.

        Removing redundant code path. WebkitCSSSVGDocumentValue
        can be expressed by a CSSPrimitiveValue.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:
        * css/WebKitCSSSVGDocumentValue.cpp: Removed.
        * css/WebKitCSSSVGDocumentValue.h: Removed.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::customCSSText):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Simon Fraser.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        With this approach, there are situations with nested named flows laid out in
        auto-height regions and thus assuming 2 step layouts, in which is enough to lay
        out the inner named flow once instead of twice with a performance gain.
        In such situations, the layers lists for the inner named flow are not yet updated
        when collectFixedPositionedLayers is called to paint the fixed positioned layers.
        Therefore I called updateLayerListsIfNeeded for all named flows layers, via the flow thread controller, before inspecting the named flow layers to avoid hitting the assertions when
        accessing the named flows layers lists.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateNamedFlowsLayerListsIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/FlowThreadController.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Emit
        error state expected by Khronos test suite.

2014-01-14  Brady Eidson  <beidson@apple.com>

        IDB: create object store support
        <rdar://problem/15779639> and https://bugs.webkit.org/show_bug.cgi?id=127011

        Reviewed by Anders Carlsson.

        Split the 3 objects declared in IDBDatabaseMetadata into their own header files:
        * Modules/indexeddb/IDBDatabaseMetadata.h:
        * Modules/indexeddb/IDBIndexMetadata.h:
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        * Modules/indexeddb/IDBObjectStoreMetadata.h:
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):

        Add cross thread copying for IDBDatabaseMetadata:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBIndexMetadata>::copy):
        (WebCore::IDBObjectStoreMetadata>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Crash in NavigatorBase::vendor loading apple.com
        https://bugs.webkit.org/show_bug.cgi?id=127028

        Reviewed by Daniel Bates.

        Export function pointers to be filled in with WebKitSystemInterface functions.

        * WebCore.exp.in:

2014-01-14  Jeffrey Pfau  <jpfau@apple.com>

        Build fix after r162034

        Rubber-stamped by Benjamin Poulain.

        * WebCore.exp.in:

2014-01-14  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Resource finish time is sometimes earlier than response received time.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading): Use currentTime() and not the
        passed in finishTime.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Follow up build fix attempt.

        * WebCore.exp.in:

2014-01-14  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Create separate progress tracker clients
        https://bugs.webkit.org/show_bug.cgi?id=127025

        Reviewed by Sam Weinig.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        * loader/ProgressTrackerClient.h:

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] WebGLRenderingContext::validateCompressedTexDimensions improperly calculates values
        https://bugs.webkit.org/show_bug.cgi?id=126926

        Reviewed by Dean Jackson.

        Test coverage in fast/canvas/webgl/webgl-compressed-texture-size-limit.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Pass target to
        validation function.
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Revise
        calculation to also confirm size is in bounds.
        (WebCore::WebGLRenderingContext::validateCompressedTexSubDimensions): Pass
       target to validation function.
        * html/canvas/WebGLRenderingContext.h: Modify signature.

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        On iOS, we never want to make scrollbar layers
        https://bugs.webkit.org/show_bug.cgi?id=127024
        <rdar://problem/15745768>

        Reviewed by Dean Jackson.

        On platforms that delegate scrolling, don't try to make layers
        for scrollbars.
        
        This fixes a crash in RenderLayerCompositor::updateOverflowControlsLayers()
        where m_overflowControlsHostLayer is null.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls):

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Avoid PLATFORM() macros in exported headers.

        * platform/ios/WebEvent.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix for 32-bit simulator and device

        CGFloat is defined to be float, double for 32-bit, and 64-bit devices respectively.
        Because WebCore::createCGColorWithDeviceWhite() takes CGFloat arguments we need to
        list both the float and double-variants of this symbol in WebCore.exp.in. Currently
        we only list the version whose arguments are of type double.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up exports and headers for iOS.
        
        Don't use ENABLE() macro in an exported header.

        * platform/ios/wak/WAKResponder.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Move symbol __ZN7WebCore34registerQLPreviewConverterIfNeededEP5NSURLP8NSStringP6NSData to
        section USE(QUICK_LOOK)

        * WebCore.exp.in:

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Clean up DNSResolveQueue
        https://bugs.webkit.org/show_bug.cgi?id=127007

        Reviewed by Geoffrey Garen.

        Move the shared() getter out of line and make it use NeverDestroyed.
        Add a Timer member variable instead of inheriting from TimerBase. 
        Use std::atomic<int> for the m_requestsInFlight member variable.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        (WebCore::DNSResolveQueue::decrementRequestCount):

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Two more exports for iOS.

        * WebCore.exp.in:

2014-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        One more buildfix after r161999.

        * Modules/webaudio/MediaStreamAudioSource.h:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Export __ZN7WebCore11FileChooser16chooseMediaFilesERKN3WTF6VectorINS1_6StringELm0ENS1_15CrashOnOverflowEEERKS3_PNS_4IconE
        to fix WK1 iOS linking.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        iOS build fixing: export required by iOS WebKit1.

        * WebCore.exp.in:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162000.
        http://trac.webkit.org/changeset/162000
        https://bugs.webkit.org/show_bug.cgi?id=127009

        API versioning is wrong (Requested by rfong on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:

2014-01-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Move CSSPrimitiveValue <-> LayoutBox Conversion to CSSPrimitiveValueMappings
        https://bugs.webkit.org/show_bug.cgi?id=126719

        Reviewed by Dirk Schulze.

        The standard location for conversions to/from CSSPrimitiveValues is CSSPrimitiveValueMappings.
        This patch moves the conversion for LayoutBoxes from BasicShapeFunctions to
        CSSPrimitiveValueMappings.h.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LayoutBox):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):

2014-01-09  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Get rid of ThreadRestrictionVerifier
        https://bugs.webkit.org/show_bug.cgi?id=127004

        Reviewed by Sam Weinig.

        Remove now unneeded calls.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::readFromDatabase):

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Directly allocate NSMutableDictionary in QLPreviewConverterDictionary() and QLContentDictionary()
        https://bugs.webkit.org/show_bug.cgi?id=126999
        <rdar://problem/15810305>

        Reviewed by Joseph Pecoraro.

        Fixes an issue where we may crash when subsequently accessing WebCore::QLPreviewConverterDictionary()
        or WebCore::QLContentDictionary(). Currently neither of these functions retain'ed the NSMutable dictionary
        returned by [NSMutableDictionary dictionary]. Instead, we should allocate and initialize NSMutableDictionary
        directly to ensure that the dictionary is retained.

        * platform/network/ios/QuickLook.mm:
        (QLPreviewConverterDictionary):
        (QLContentDictionary):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Mark Rowe  <mrowe@apple.com>

        WebCore icon database appears to leak sudden termination assertions
        <https://webkit.org/b/126971> / <rdar://problem/15808797>

        Introduce an RAII wrapper around disableSuddenTermination / enableSuddenTermination
        and adopt it in IconDatabase to address the incorrect management of sudden termination.

        IconDatabase now owns up to two SuddenTerminationDisabler objects. One ensures that
        sudden termination is disabled while we're waiting on the sync timer to fire. The second
        ensures that sudden termination is disabled while we're waiting on the sync thread to
        process any pending work.

        Reviewed by Alexey Proskuryakov.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::wakeSyncThread): Disable sudden termination until the sync thread
        has finished this unit of work.
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Disable sudden termination until the
        sync timer has fired.
        (WebCore::IconDatabase::syncTimerFired): Clear the member variable to reenable sudden termination.
        (WebCore::IconDatabase::syncThreadMainLoop): Taken ownership of the SuddenTerminationDisabler
        instance when we start processing a unit of work. Discard the object when our work is complete.
        * loader/icon/IconDatabase.h:
        * platform/SuddenTermination.h:
        (WebCore::SuddenTerminationDisabler::SuddenTerminationDisabler): Disable sudden termination when created.
        (WebCore::SuddenTerminationDisabler::~SuddenTerminationDisabler): Enable it when destroyed.

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: For Remote Inspection link WebProcess's to their parent UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=126995

        Reviewed by Timothy Hatcher.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::parentProcessIdentifier):
        Client method intended for WebKit2 so a WebProcess can link to its UIProcess.

        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::parentProcessIdentifier):
        Provide parent process identifier if there is one.

2014-01-14  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 2

        * WebCore.exp.in:
        Export some more symbols.

2014-01-14  Brian J. Burg  <burg@cs.washington.edu>

        Add ENABLE(WEB_REPLAY) feature flag to the build system
        https://bugs.webkit.org/show_bug.cgi?id=126949

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2014-01-10  Jer Noble  <jer.noble@apple.com>

        Crash in WebCore::MediaSourcePrivateAVFObjC::hasAudio const + 13
        https://bugs.webkit.org/show_bug.cgi?id=126768

        Reviewed by Eric Carlson.

        Null-check m_mediaSourcePrivate before calling.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] Playback rate is not set when pipeline is not ready.
        https://bugs.webkit.org/show_bug.cgi?id=126692

        Reviewed by Philippe Normand.

        No new tests. Covered by existing tests.

        Added new method updatePlaybackRate which is called when playback rate change is possible.
        Added m_lastPlaybackRate in order to retrieve last correct playback rate and notify upper
        layers about that setting playback rate failed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161978.
        http://trac.webkit.org/changeset/161978
        https://bugs.webkit.org/show_bug.cgi?id=126992

        Test case causes crash on some hardware (Requested by bfulgham
        on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161964 and r161965.
        http://trac.webkit.org/changeset/161964
        http://trac.webkit.org/changeset/161965
        https://bugs.webkit.org/show_bug.cgi?id=126988

        Tests do not pass on the bots because of slight color
        differences. The tests should be redone with squared results
        and blending that leads to stable colors. (Requested by krit_
        on #webkit).

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Shape images are now <image> types, not just URIs
        https://bugs.webkit.org/show_bug.cgi?id=125224

        Reviewed by Andreas Kling.

        Added support for image-set valued shapes. Added an optional ResourceLoaderOptions
        parameter to CSSImageSetValue::cachedImageSet() to enable CORS-enabled fetch of
        image-set images. This change is based on a similar patch for ordinary shape image values:
        https://bugs.webkit.org/show_bug.cgi?id=123114.

        Tests: fast/shapes/shape-inside/shape-inside-image-set.html
               fast/shapes/shape-outside-floats/shape-outside-image-set.html

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageSetValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingShapeImage):
        * css/StyleResolver.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):

2014-01-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Modernize AccessibilityChildrenVector loops
        https://bugs.webkit.org/show_bug.cgi?id=126915

        Reviewed by Anders Carlsson.

        Change appropriate for loops to use the new style.
        Use auto where appropriate.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::listBoxOptionIndex):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::clearChildren):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        (WebCore::AccessibilityRenderObject::isTabItemSelected):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::updateAttachmentViewParents):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        (-[WebAccessibilityObjectWrapperBase accessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (convertToNSArray):
        (convertStringsToNSArray):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] SoupNetworkSession::setAcceptLanguages should receive a const reference
        https://bugs.webkit.org/show_bug.cgi?id=126966

        Reviewed by Gustavo Noronha Silva.

        We don't really need to modify the Vector just to ignore the C
        locale.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::buildAcceptLanguages): Rework it to not modify the
        passed vector to ignore the C locale when it's present.
        (WebCore::SoupNetworkSession::setAcceptLanguages): Use const Vector<String>&.
        * platform/network/soup/SoupNetworkSession.h:

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        HTMLMediaElement::potentiallyPlaying can be more simple.
        https://bugs.webkit.org/show_bug.cgi?id=111

        Reviewed by Eric Carlson.

        Tests: No new tests, just refactorings.

        Expression is simplified because the first 'if' statement depends on the same condition
        as pausedToBuffer value.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-14  Andreas Kling  <akling@apple.com>

        Remove deprecated DeferrableOneShotTimer constructor.
        <https://webkit.org/b/126984>

        Remove the deprecated constructor for callback functions that take
        the timer by pointer instead of by reference.

        This shrinks DeferrableOneShotTimer by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Make CachedSVGDocument independent of CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=126133

        Reviewed by Antti Koivisto.

        Clean-up the pendingSVGDocuments code in StyleResolver.
        CachedSVGDocumentReference is responsible for requesting the
        SVG document instead of WebKitCSSSVGDocumentValue.
        CachedSVGDocumentReference can be used by other SVG resource like
        clip-path and mask now so that these may load external resources
        as well.
        WebKitCSSSVGDocumentValue does not provide any further value
        and will be removed in the next patch.

        Refactoring, no new test cases.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h: Replace Map with a Set.
        (WebCore::StyleResolver::State::pendingSVGDocuments): Use the Set from now on.
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h: Is responsible for 
            requesting the SVG document.
        (WebCore::CachedSVGDocumentReference::create):
        (WebCore::CachedSVGDocumentReference::loadRequested):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::createCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:

2014-01-14  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] AXChildrenChanged notification handling is a performance black hole
        https://bugs.webkit.org/show_bug.cgi?id=126970

        Reviewed by Gustavo Noronha Silva.

        Remove code that is causing a huge performance problem when
        loading big pages, just to be able to emit the children-changed:add
        signal at the exact time a child is added.

        This removal does not imply that the signal won't be ever emitted,
        just that it will be emitted a bit later (when the new child is
        asynchronously added to the tree), which should be good enough
        anyway for Accessible Technologies, without impacting perfformance
        in such a negative way.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed
        extremely expensive referring loop when AXChildrenChanged is received.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

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

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-14  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove accidentally added PLATFORM(QT) from Source/WebCore/editing/EditorCommand.cpp after r161638
        https://bugs.webkit.org/show_bug.cgi?id=126980

        Reviewed by Andreas Kling.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] The list of fixed positioned layers in named flows should be sorted by z-index
        https://bugs.webkit.org/show_bug.cgi?id=126978

        Reviewed by Antti Koivisto.

        Return the list of fixed positioned layers sorted by z-index from
        FlowThreadController::collectFixedPositionedLayers instead of manually sort it
        every time we need it (RenderLayer::paintFixedLayersInNamedFlows, RenderLayer::hitTestFixedLayersInNamedFlows).
        Refactoring covered by existing regions tests.

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceLoaderOptions harder.
        <https://webkit.org/b/126972>

        Make all ResourceLoaderOptions members bitfields to reduce padding,
        shrinking it from 28 to 4 bytes.

        Reviewed by Antti Koivisto.

        * loader/ResourceLoaderOptions.h:

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceError harder.
        <https://webkit.org/b/126969>

        Re-arrange the members of ResourceError to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Antti Koivisto.

        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::ResourceErrorBase):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack RenderLayer harder.
        <https://webkit.org/b/126967>

        Re-arrange the members of ScrollableArea a bit so that RenderLayer
        can combine its bitfields with the ones in ScrollableArea.
        This makes RenderLayer fit into a snugger size class, saving 32 bytes
        per layer.

        296 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:

            Put bitfield members at the end of ScrollableArea so inheriting
            classes can synergize with the padding.

        * rendering/RenderLayer.h:

            Make m_blendMode a bitfield to avoid bloating the class.

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebCore build fixes

        Add WebKit and WebKit2 as allowable clients of WebCore.

        * Configurations/WebCore.xcconfig:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 1

        * WebCore.xcodeproj/project.pbxproj:
        Move some headers to 'private', from 'project'.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161907.
        http://trac.webkit.org/changeset/161907
        https://bugs.webkit.org/show_bug.cgi?id=126963

        fast/canvas/webgl/webgl-compressed-texture-size-limit.html
        fails on many bots (Requested by ap on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        Fix typedef of DragDataRef from id back to id<NSDraggingInfo>
        <http://webkit.org/b/126958>
        <rdar://problem/14814649>

        Reviewed by Mark Rowe.

        * WebCore.exp.in: Export different symbols based on
        __has_feature(objc_protocol_qualifier_mangling) since clang
        mangles the type differently with that change.

        * platform/DragData.h:
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData):
        - Revert r154493 by switching back to id<NSDraggingInfo>.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161939.
        http://trac.webkit.org/changeset/161939
        https://bugs.webkit.org/show_bug.cgi?id=126956

        didn't work with mac, of course (Requested by thorton on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private instead of project for WK2's use.

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Make NetworkStateNotifier.h a private header, needed by iOS.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        More work towards getting iOS WK1 building.

        Some more Private headers for iOS.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Highlighting password field then making a Sticky Note via Safari Services exposes password
        https://bugs.webkit.org/show_bug.cgi?id=126946

        Reviewed by Enrica Casucci.

        Using the Services menu has a slightly different codepath than Editor::copy() does. This
        patch duplicates the canCopy() check that Editor::copy() does.

        Testing is not possible because the Services menu is not accessible to our tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::stringSelectionForPasteboard):
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        (WebCore::Editor::dataSelectionForPasteboard):

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Crash due to forceLostContext
        https://bugs.webkit.org/show_bug.cgi?id=126947

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/textures/origin-clean-conformance.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::isContextLost): Make const.
        (WebCore::WebGLRenderingContext::platformLayer): Don't attempt to use
        a lost context.
        * html/canvas/WebGLRenderingContext.h: isContextLost should be const.

2014-01-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] WebCorePlatform build can sometimes fail due to missing generated headers
        https://bugs.webkit.org/show_bug.cgi?id=126911

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Add an explicit dependency from WebCorePlatform to WebCore.

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for resolving style
        https://bugs.webkit.org/show_bug.cgi?id=126199

        Reviewed by Ryosuke Niwa.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/RuleSet.h:

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Update the SelectorQuery code using compiled selector after r161196
        https://bugs.webkit.org/show_bug.cgi?id=126860

        Reviewed by Andreas Kling.

        Update tree traversal code to the current traversal functions.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Various iOS WebKit1 build fixes.

        * WebCore.xcodeproj/project.pbxproj: iOS WebKit1 needs various
        headers to be Private.

2014-01-13  Andreas Kling  <akling@apple.com>

        Map RootInlineBox to containing region via bit+hashmap.
        <https://webkit.org/b/126917>

        The vas majority of RootInlineBox objects don't have a containing
        RenderRegion, so let's store that in a bit+hashmap configuration
        instead of having a dedicated pointer member for it.

        148 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):

            Added m_hasContainingRegion bit.

        (WebCore::containingRegionMap):

            Global map between RootInlineBox and RenderRegion.

        (WebCore::RootInlineBox::~RootInlineBox):

            Remove self from aforementioned global map if needed.

        (WebCore::RootInlineBox::paint):

            Tweak a condition to avoid double hash lookup.

        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::clearContainingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

            Store the containing region in a bit+hashmap.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-13  Daniel Bates  <dabates@apple.com>

        Add uint8_t specialization for WebCore::writeLittleEndian()
        https://bugs.webkit.org/show_bug.cgi?id=126924

        Reviewed by Darin Adler.

        Specialize WebCore::writeLittleEndian() for datatype uint8_t so as to avoid
        a compiler warning when right shifting a uint8_t by 8 because the result of
        such a computation is undefined.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian<uint8_t>): Added.

2014-01-13  Daniel Bates  <dabates@apple.com>

        r161638 broke the Windows build
        https://bugs.webkit.org/show_bug.cgi?id=126916

        * DerivedSources.make:

2014-01-13  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict media playback
        https://bugs.webkit.org/show_bug.cgi?id=126780

        Reviewed by Jer Noble.

        Test: media/video-concurrent-playback.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add HTMLMediaSession.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Add a media session object to manage HTMLMediaElement restrictions.
        * html/HTMLMediaSession.cpp: Added.
        * html/HTMLMediaSession.h: Added.

        Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::loadResource): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::pause): Ditto
        (WebCore::HTMLMediaElement::pauseInternal): Ditto
        (WebCore::HTMLMediaElement::suspend): Ditto
        (WebCore::HTMLMediaElement::resume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Tell media session playback is about to start.
        (WebCore::HTMLMediaElement::deliverNotification): Ditto.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted): Ditto.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Ditto.
        (WebCore::HTMLMediaElement::pausePlayback): New, allows the media session to pause playback.
        * html/HTMLMediaElement.h:

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen): Use the media session to manage restrictions.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): Add logging.
        (WebCore::MediaSession::endInterruption): Ditto.
        (WebCore::MediaSession::pauseSession): New, allows the session manager to pause playback.
        * platform/audio/MediaSession.h:

        Add per-media type restrictions.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize restrictions.
        (WebCore::MediaSessionManager::addRestriction): New.
        (WebCore::MediaSessionManager::removeRestriction): New.
        (WebCore::MediaSessionManager::restrictions): New.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): New. If only one session if the same
            type is allowed to play, pause all others.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h: Added.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Added.
        (WebCore::MediaSessionManager::sharedManager):
        (WebCore::m_objcObserver):
        (-[WebAVAudioSessionHelper initWithCallback:]):
        (-[WebAVAudioSessionHelper dealloc]):
        (-[WebAVAudioSessionHelper interruption:]):

        * platform/audio/mac/AudioDestinationMac.h: Add pausePlayback.

        Allow tests to set media session restrictions.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build more.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Fix copy of SystemMemory.h in iOS WebKit build.
        
        Move SystemMemory.h from platform/SystemMemory.h to platform/ios/SystemMemory.h.
        Add it to the project file.
        Make it a Private header.
        Add PLATFORM(IOS) #idfefs around its contents.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/SystemMemory.h: Renamed from Source/WebCore/platform/SystemMemory.h.

2014-01-13  Youenn Fablet  <youennf@gmail.com>

        Dispatch a progress event before dispatching abort, error or timeout event
        https://bugs.webkit.org/show_bug.cgi?id=126575

        Reviewed by Alexey Proskuryakov.

        Added sending of progress event after readystatechange event (switching to DONE state) in case of abort, error or timeout. 
        Fixed assertions in XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchErrorEvents): added sending of progress event before the specific error event
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): fixed assertion
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent): fixed assertion

2014-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add SoupNetworkSession class to wrap a SoupSession
        https://bugs.webkit.org/show_bug.cgi?id=126813

        Reviewed by Gustavo Noronha Silva.

        Add SoupNetworkSession class that wraps a SoupSession and move all
        the code related to the SoupSession from ResourceHandle to
        SoupNetworkSession, including the static methods to get the
        default session and create testing and private sessions.

        * GNUmakefile.list.am: Add new files to compilation.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * platform/network/NetworkStorageSession.h: Use SoupNetworkSession
        instead of SoupSession.
        * platform/network/ResourceHandle.h:
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForSession): Use SoupNetworkSession to get the
        SoupSession.
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::platformResolve): Ditto.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Use
        SoupNetworkSession instead of SoupSession.
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::NetworkStorageSession::defaultStorageSession): Create a
        NetworkStorageSession with a NULL SoupNetworkSession which means
        that the default SoupNetworkSession will be used.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        Call SoupNetworkSession::createPrivateBrowsingSession() to create
        the private session.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Call
        SoupNetworkSession::createTestingSession() to create the testing
        session.
        (WebCore::NetworkStorageSession::soupNetworkSession): Return the
        SoupNetworkSession or the default one.
        (WebCore::NetworkStorageSession::setSoupNetworkSession): Set a new
        SoupNetworkSession.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext): Use SoupNetworkSession to get the
        SoupSession.
        (WebCore::ResourceHandleInternal::soupSession): Simply call
        sessionFromContext(), since ensureSessionIsInitialized() is no
        longer needed, because the SoupSession are now initialized in the
        SoupNetworkSession constructor.
        (WebCore::ResourceHandle::didStartRequest): Function to notify the
        ResourceHandle that current request has just started for web timing.
        * platform/network/soup/SoupNetworkSession.cpp: Added.
        (WebCore::soupLogPrinter): Logger callback.
        (WebCore::SoupNetworkSession::defaultSession): Return a reference
        to the default SoupNetworkSession.
        (WebCore::SoupNetworkSession::createPrivateBrowsingSession):
        Create a new private session.
        (WebCore::SoupNetworkSession::createTestingSession): Create a new
        testing session.
        (WebCore::SoupNetworkSession::createForSoupSession): Create a new
        SoupNetworkSession for the given SoupSession.
        (WebCore::authenticateCallback): Callback emitted by the
        SoupSession when the request needs authentication.
        (WebCore::requestStartedCallback): Callback emitted by the
        SoupSession when as request has just started.
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::~SoupNetworkSession):
        (WebCore::SoupNetworkSession::setupLogger): Helper private
        function to setup the logger.
        (WebCore::SoupNetworkSession::setCookieJar): Set a new CookieJar
        in the session replacing the existing one.
        (WebCore::SoupNetworkSession::cookieJar): Return the current
        CookieJar of the session.
        (WebCore::SoupNetworkSession::setCache): Set a disk cache.
        (WebCore::SoupNetworkSession::cache): Return the current disk cache.
        (WebCore::SoupNetworkSession::setSSLPolicy): Set the SSL policy.
        (WebCore::SoupNetworkSession::sslPolicy): Get the current SSL policy.
        (WebCore::SoupNetworkSession::setHTTPProxy): Set the HTTP proxy.
        (WebCore::SoupNetworkSession::httpProxy): Get the current HTTP proxy.
        (WebCore::SoupNetworkSession::setupHTTPProxyFromEnvironment): Set
        the HTTP proxy using the environment variables.
        (WebCore::buildAcceptLanguages): Helper function build the accept
        language string in the format expected by soup (RFC 2616).
        (WebCore::SoupNetworkSession::setAcceptLanguages): Set the accept
        language for the given list of languages.
        * platform/network/soup/SoupNetworkSession.h: Added.
        (WebCore::SoupNetworkSession::soupSession): Return the SoupSession.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Add case
        for SHADER_SYMBOL_TYPE_VARYING. This is a no-op to match existing
        behavior.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        [iOS] Include RenderElement.h to fix BaseChooserOnlyDateAndTimeInputType.cpp

        Fixes the following build failure:

            Undefined symbols for architecture x86_64:
              "__ZNK7WebCore13ContainerNode8rendererEv", referenced from:
                  __ZN7WebCore35BaseChooserOnlyDateAndTimeInputType22handleDOMActivateEventEPNS_5EventE in BaseChooserOnlyDateAndTimeInputType.o

        * html/BaseChooserOnlyDateAndTimeInputType.cpp: Include
        RenderElement.h.

2014-01-13  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: copy iOS-specific generated headers

        * Configurations/WebCore.xcconfig: Excluded DOMTouch* and DOMGesture* headers on Mac.
        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Zalan Bujtas  <zalan@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        <https://webkit.org/b/126283>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-13  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        REGRESSION(r161715): Use of uninitialized value $ENV{"PLATFORM_NAME"}
        https://bugs.webkit.org/show_bug.cgi?id=126873

        Reviewed by Csaba Osztrogonác.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-13  Andreas Kling  <akling@apple.com>

        CTTE: Autoscroll renderer is always a RenderBox.
        <https://webkit.org/b/126884>

        Reviewed by Antti Koivisto.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::autoscrollRenderer):

            Make autoscrollRenderer() return a RenderBox*.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):

            Only check if the autoscroll renderer is being torn down
            in RenderBox::willBeDestroyed() since it's not relevant for
            other renderer types.

2014-01-13  László Langó  <llango.u-szeged@partner.samsung.com>

        Text should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115640

        Reviewed by Csaba Osztrogonác.

        http://dom.spec.whatwg.org/#interface-text
        Make Text constructable so that one can do "new Text('abc')"
        instead of "document.createTexte('abc')".

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/cdd5a914daf3862379a5ce4596149bd690d0fa08

        Test: fast/dom/Text/text-constructor.html

        * dom/Text.cpp:
        (WebCore::Text::create):
        * dom/Text.h:
        * dom/Text.idl:

2014-01-13  Zan Dobersek  <zdobersek@igalia.com>

        Avoid unnecessary copies of AccessibilityObject::AccessibilityChildrenVector
        https://bugs.webkit.org/show_bug.cgi?id=126876

        Reviewed by Andreas Kling.

        AccessibilityObject::children() returns a reference to the Vector of that AccessibilityObject's children.
        The majority of callsites stores the return value in a temporary value instead of a reference, causing
        a copy each time. A reference to the return value should be used instead.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject):
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (listObjectForSelection):
        (optionFromList):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (webkitAccessibleRefChild):
        (getIndexInParentForCellInRow):
        (getInterfaceMaskFromObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-01-13  László Langó  <llango.u-szeged@partner.samsung.com>

        Comment should be consructable.
        https://bugs.webkit.org/show_bug.cgi?id=115642

        Reviewed by Andreas Kling.

        http://dom.spec.whatwg.org/#comment
        This allows us to do `new Comment('abc')` instead of `document.createComment('abc')`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/06e4a37f6b11348606de5405edac1ada97499d2a%5E%21

        Test: fast/dom/Comment/comment-constructor.html

        * dom/Comment.cpp:
        (WebCore::Comment::create):
        * dom/Comment.h:
        * dom/Comment.idl:

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161808.
        http://trac.webkit.org/changeset/161808
        https://bugs.webkit.org/show_bug.cgi?id=126874

        This patch make several files to be always regenerated on
        every make (Requested by KaL on #webkit).

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am:

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161843.
        http://trac.webkit.org/changeset/161843
        https://bugs.webkit.org/show_bug.cgi?id=126871

        Caused CSS custom filter tests to assert (Requested by smfr on
        #webkit).

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161840.
        http://trac.webkit.org/changeset/161840
        https://bugs.webkit.org/show_bug.cgi?id=126870

        Caused jsscore and layout test failures (Requested by smfr on
        #webkit).

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLNonNegativeInteger):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty):
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        * xml/XPathNodeSet.h:

2014-01-12  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix build warnings by unused parameter
        https://bugs.webkit.org/show_bug.cgi?id=126867

        Reviewed by Gyuyoung Kim.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: 
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Remove unused parameter 'operation'.

2014-01-12  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix for WinCairo.

        * WebCore.vcxproj/WebCoreCairo.props: Add missing include path
        to locate SelectorCompiler.h.

2014-01-12  Maciej Stachowiak  <mjs@apple.com>

        Fix iOS build breakage from http://trac.webkit.org/changeset/161844
        https://bugs.webkit.org/show_bug.cgi?id=126866

        Reviewed by Simon Fraser.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator): Use initializeIterator instead of createSharedIterator,
        which does not exist.

2014-01-12  Darin Adler  <darin@apple.com>

        Add PLATFORM(COCOA) and USE(FOUNDATION)
        https://bugs.webkit.org/show_bug.cgi?id=126859

        Reviewed by Anders Carlsson.

        * config.h: Use PLATFORM(COCOA) instead of PLATFORM(MAC) || PLATFORM(IOS)
        to set USE(FILE_LOCK). Would be nice to use OS(DARWIN), but that would be
        a change in behavior that might be incorrect. Removed bogus comments in
        the USE(NEW_THEME) setting code. Removed redundant code to set USE(CA),
        which exactly duplicates code that already exists in Platform.h.

2014-01-12  Darin Adler  <darin@apple.com>

        Add deprecatedCharacters as a synonym for characters and convert most call sites
        https://bugs.webkit.org/show_bug.cgi?id=126858

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPathLexer::IDBKeyPathLexer):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSubprotocol):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setExtensions):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasMisspelling):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::write):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/Document.cpp:
        (WebCore::Document::parseQualifiedName):
        * editing/Editor.cpp:
        (WebCore::Editor::misspelledWordAtCaretOrRange):
        (WebCore::Editor::misspelledSelectionString):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/TextCheckingHelper.h:
        (WebCore::TextCheckingParagraph::textDeprecatedCharacters):
        * editing/TextIterator.cpp:
        (WebCore::collapsedSpaceLength):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        (WebCore::containsKanaLetters):
        (WebCore::SearchBuffer::SearchBuffer):
        * editing/TextIterator.h:
        (WebCore::TextIterator::characters):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):
        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeSpaces):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::isSourceListNone):
        (WebCore::CSPSourceList::parse):
        (WebCore::NonceDirective::parse):
        (WebCore::MediaListDirective::parse):
        (WebCore::CSPDirectiveList::parse):
        (WebCore::CSPDirectiveList::parseReportURI):
        (WebCore::CSPDirectiveList::parseReflectedXSS):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedURL):
        (WebCore::visitedLinkHash):
        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer):
        * platform/URL.cpp:
        (WebCore::URL::port):
        (WebCore::encodeHostnames):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::width):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::bindText):
        * platform/text/DecodeEscapeSequences.h:
        (WebCore::decodeEscapeSequences):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIteratorWithRules):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::computeCanUseSimpleFontCodePath):
        * rendering/RenderText.h:
        (WebCore::RenderText::characters):
        (WebCore::RenderText::deprecatedCharacters):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::tryHyphenating):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::processRenderSVGInlineText):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::measureCharacterRange):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::parsePoint):
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGGlyphMap.h:
        (WebCore::SVGGlyphMap::addGlyph):
        (WebCore::SVGGlyphMap::collectGlyphsForString):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumberFromString):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parseRect):
        (WebCore::pointsListFromSVGData):
        (WebCore::parseGlyphName):
        (WebCore::parseKerningUnicodeString):
        (WebCore::parseDelimitedString):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::parse):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::parse):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformType):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::parseAttribute):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::parseAttributes):
        Use deprecatedCharacters instead of characters.

2014-01-12  Darin Adler  <darin@apple.com>

        Add type checking to isEqual methods
        https://bugs.webkit.org/show_bug.cgi?id=126862

        Reviewed by Anders Carlsson.

        * page/ios/WebEventRegion.mm:
        (-[WebEventRegion isEqual:]): Add type checking on the argument.
        Add a FIXME about the lack of a hash method override. Formatted to match
        the usual WebKit coding style.

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone):
        (WebCore::uTextLatin1Extract):
        (WebCore::uTextLatin1MapNativeIndexToUTF16):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Remove all uses of AtomicallyInitializedStatic from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126861

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        (WebCore::transactions):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::originMap):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::encodingRegistryMutex):
        (WebCore::newTextCodec):
        (WebCore::atomicCanonicalTextEncodingName):
        (WebCore::dumpTextEncodingNameMap):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::instance):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use an std::atomic<uint32_t> when computing IDBDatabase transaction IDs
        https://bugs.webkit.org/show_bug.cgi?id=126853

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::nextTransactionId):

2014-01-12  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Darin Adler.

        - Do some initial cleanup before adding complete Latin-1 support.

        * platform/text/TextBreakIterator.cpp:
        Remove non-ICU acquireLineBreakIterator() implementation.

        * platform/text/TextBreakIterator.h:
        - Changes acquireLineBreakIterator() to take a StringView.

        * platform/text/TextBreakIteratorICU.cpp:
        - Refactor iterator initialization and setting of text on the iterator.
        - Add support for using a Latin-1 provider (this is not currently used).

        * platform/text/icu/UTextProviderLatin1.cpp:
        * platform/text/icu/UTextProviderLatin1.h:
        - Add back non-context aware Latin-1 provider (from r129662).
        - Rename context aware provider.

        * platform/text/icu/UTextProviderUTF16.cpp:
        * platform/text/icu/UTextProviderUTF16.h:
        - Rename context aware provider.

2014-01-12  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

2014-01-12  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build after r161839.

        * WebCore.vcxproj/WebCoreCommon.props:

2014-01-12  Darin Adler  <darin@apple.com>

        Reduce use of String::characters
        https://bugs.webkit.org/show_bug.cgi?id=126854

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        Get rid of unneeded code to turn a WTF::String into an NSString, since that's
        built into the WTF::String class.

        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace): Use WTF::String's [] operator instead of
        an explicit call to the characters function. Small performance cost.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Ditto.

        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph): Use reverseFind instead of writing our own loop.
        (WebCore::endOfParagraph): Use find instead of writing our own loop.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces): Use characters16 instead of
        characters since we have already checked is8Bit.
        (WebCore::parseHTMLNonNegativeInteger): Ditto. Replace the length check with
        a check of isNull since a zero length string could be 8 bit, but it's not
        safe to call is8Bit on a null WTF::String. (That should probably be fixed.)

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource): Use StringBuilder
        instead of String in code that builds up a string one character at a time.
        The old way was ridiculously slow because it allocated a new string for every
        character; the new way still isn't all that efficient, but it's better. Also
        changed to use strchr instead of WTF::String::find for special characters.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Use WTF::String's
        [] operator instead of an explicit call to the characters function.
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty): Ditto.
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty): Ditto.
        * platform/Length.cpp:
        (WebCore::newCoordsArray): Ditto.

        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor): Use characters16 since we already checked is8Bit.
        (WebCore::Color::Color): Ditto.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName): Use characters16 instead of
        characters since we already checked is8Bit. Also use isEmpty instead of !length.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun): Use characters16 instead of characters
        since we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width): Check for zero length instead of checking
        for null characters.

        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache): Rewrite ligatures
        for loop and give local variables a better name. Construct the substring with
        the substring function. Still a really inefficient approach -- allocating a new
        string for every character is absurdly expensive.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Use String instead of StringBuilder. Still
        not all that efficient, but better than before. Use substring to construct the
        substring.

        * xml/XPathNodeSet.h: Added begin and end functions so we can use a C++11 for
        loop with this class.

2014-01-12  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for matching in SelectorQuery
        https://bugs.webkit.org/show_bug.cgi?id=126185

        Reviewed by Ryosuke Niwa.

        Compile selectors on demand and use the generated binary to perform
        element matching in SelectorQuery.

        Tests: fast/selectors/querySelector-long-adjacent-backtracking.html
               fast/selectors/querySelector-long-child-backtracking.html
               fast/selectors/querySelector-mixed-child-adjacent-backtracking.html
               fast/selectors/querySelector-multiple-simple-child-backtracking.html
               fast/selectors/querySelector-simple-adjacent-backtracking.html
               fast/selectors/querySelector-simple-child-backtracking.html

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Simplify creation of XMLHttpRequestStaticData
        https://bugs.webkit.org/show_bug.cgi?id=126852

        Reviewed by Sam Weinig.

        Add a staticData() getter that does the initialization and get rid of the explicit
        calls to initializeXMLHttpRequestStaticData().

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
        (WebCore::staticData):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::isAllowedHTTPHeader):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Final WebCore link error: update a symbol in WebCoreSystemInterfaceIOS.mm.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic in DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=126851

        Reviewed by Sam Weinig.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        (WebCore::DatabaseBackendBase::closeDatabase):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::getCachedVersion):
        (WebCore::DatabaseBackendBase::setCachedVersion):

2014-01-12  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build after r161830.

        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Don't build JSTouch* and JSGesture* files on Mac.

        * Configurations/WebCore.xcconfig:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Clean up NetworkStateNotifier class
        https://bugs.webkit.org/show_bug.cgi?id=126850

        Reviewed by Andreas Kling.

        Use std::call_once instead of AtomicallyInitializedStatic and a std::function
        instead of a custom function pointer typedef.

        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier):
        (WebCore::NetworkStateNotifier::addNetworkStateChangeListener):
        (WebCore::NetworkStateNotifier::notifyNetworkStateChange):
        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add implementations of Frame::viewportArguments() and
        Frame::setViewportArguments().

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportArguments):
        (WebCore::Frame::setViewportArguments):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add JSWebKitPlaybackTargetAvailabilityEvent.* to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Stub out some DragImage functions for iOS.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/DragImageIOS.mm: Added.
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        We need DragImage.cpp code even when ENABLE_DRAG_SUPPORT is
        not defined, because these are actually generic snapshotting
        functions.

        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix linker errors: add DateTimeFormat.cpp to the project,
        and make DateInputType::DateInputType not inline.

        * WebCore.xcodeproj/project.pbxproj:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::DateInputType):
        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix a bunch of linker errors related to exported functions.
        I removed some iOS symbols from the .exp.in file; we may have
        to add some back.

        * WebCore.exp.in:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add generated JSTouch* and JSGestureEvent.* files to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        Move implementation of AuthenticationChallenge::setAuthenticationClient() to source file for USE(CFNETWORK)
        <http://webkit.org/b/126848>

        Reviewed by Simon Fraser.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        Move implementation to here...
        * platform/network/cf/AuthenticationChallenge.h: ...from here.
        Remove duplicate header definitions inside USE(CFNETWORK).

2014-01-12  Sam Weinig  <sam@webkit.org>

        Fix windows.

        * WebCore.vcxproj/WebCore.vcxproj:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Replace more uses of AtomicallyInitializedStatic with std::call_once
        https://bugs.webkit.org/show_bug.cgi?id=126847

        Reviewed by Sam Weinig.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        * workers/WorkerThread.cpp:
        (WebCore::threadSetMutex):
        (WebCore::workerThreads):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2014-01-11  Sam Weinig  <sam@webkit.org>

        Split ICU UText providers out into their own files
        https://bugs.webkit.org/show_bug.cgi?id=126834

        Reviewed by Anders Carlsson.

        Moves the implementation of our custom UText providers out into
        their own files.
        - UTextProviderLatin1.h/cpp contains the Latin-1 provider.
        - UTextProviderUTF16.h/cpp contains the UTF-16 provider.
        - UTextProvider.h/cpp contains code common to all the providers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextAllInOne.cpp:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator):
        (WebCore::wordBreakIterator):
        (WebCore::acquireLineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::setUpIteratorWithRules):
        * platform/text/icu: Added.
        * platform/text/icu/UTextProvider.cpp: Added.
        (WebCore::fixPointer):
        (WebCore::uTextCloneImpl):
        * platform/text/icu/UTextProvider.h: Added.
        (WebCore::uTextProviderContext):
        (WebCore::uTextInitialize):
        (WebCore::uTextAccessPinIndex):
        (WebCore::uTextAccessInChunkOrOutOfRange):
        * platform/text/icu/UTextProviderLatin1.cpp: Added.
        * platform/text/icu/UTextProviderLatin1.h: Added.
        * platform/text/icu/UTextProviderUTF16.cpp: Added.
        * platform/text/icu/UTextProviderUTF16.h: Added.

2014-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix some CoreVideo linker errors on iOS by softlinking with more CoreVideo
        symbols.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

2014-01-12  Andreas Kling  <akling@apple.com>

        REGRESSION(r160806): line-height is not applied when only present in :link style.
        <http://webkit.org/b/126839>
        <rdar://problem/15799899>

        Reviewed by Antti Koivisto.

        Test: fast/css/line-height-link-style.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Use the CSSValue for SelectorChecker::MatchLink when applying
            style inside a link.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 3

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        * WebCore.xcodeproj/project.pbxproj:
        - Add missing references to AuthenticationCF.cpp and
          CookieJarCFNet.cpp.

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Remove unsafe uses of AtomicallyInitializedStatic
        https://bugs.webkit.org/show_bug.cgi?id=126838

        Reviewed by Andreas Kling.

        AtomicStrings are per thread so any static initialization of them is potentially dangerous
        unless it's certain that they're only ever used from the same thread.
        
        This goes against using them with AtomicallyInitializedStatic, so just create AtomicStrings where needed.
        (This is highly unlikely to have any real negative performance impact since these two functions
        aren't called very frequently).

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 2

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] First of many iOS fixes to WebCore.exp.in

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        - Upstream some changes to iOS-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Don't link to Mac-only frameworks when building iOS
        <http://webkit.org/b/126841>

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_iphonesimulator): Remove common frameworks that
        are already in the Xcode project.
        (OTHER_LDFLAGS_macosx): Add Mac-only frameworks removed from the
        Xcode project.
        * Configurations/WebCoreTestShim.xcconfig:
        (OTHER_LDFLAGS[sdk=macosx*]): Link to Carbon.framework for Mac
        since it was removed from the Xcode project.
        * WebCore.xcodeproj/project.pbxproj: Remove Mac-only frameworks.

2014-01-12  Tobias Mueller  <tobiasmue@gnome.org>

        --disable-dependency-tracking causes build failure due to missing directories
        https://bugs.webkit.org/show_bug.cgi?id=94488
        
        Reviewed by Gustavo Noronha Silva.

        Ensure output directory existing
        before generating DerivedSources. This allows for
        --disable-dependency-tracking to be run.

        * GNUmakefile.am: Added new target DerivedSources/ANGLE which is a directory to be created
        * bindings/gobject/GNUmakefile.am: Added new target DerivedSources/webkitdom which is a directory to be created

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] WebFontCache is Mac-only

        * WebCore.exp.in: Move export to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebEventRegion.{h|mm} to fix the build

        * WebCore.xcodeproj/project.pbxproj: Add to project.
        * page/ios/WebEventRegion.h: Added.
        * page/ios/WebEventRegion.mm: Added.
        (-[WebEventRegion initWithPoints::::]):
        (-[WebEventRegion copyWithZone:]):
        (-[WebEventRegion description]):
        (-[WebEventRegion hitTest:]):
        (-[WebEventRegion isEqual:]):
        (-[WebEventRegion quad]):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic when creating a HTTP header set
        https://bugs.webkit.org/show_bug.cgi?id=126837

        Reviewed by Sam Weinig.

        Use std::call_once when constructing the HTTPHeaderSet.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlResponseHeaderWhitelist):

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Do not link to ApplicationServices.framework for iOS
        <http://webkit.org/b/126835>

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_macosx): Add -framework ApplicationServices.
        * WebCore.xcodeproj/project.pbxproj: Remove reference to
        ApplicationServices.framework.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Build fix for StyleResolver.cpp

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCompositionFillColor): Added.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of RenderLayerCompositor::registerAllViewportConstrainedLayers()

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        Fix use of std::make_unique<>() and add an adoptPtr() call.

2014-01-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [Windows] Stop scheduling network requests in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126789
        <rdar://problem/15114727>

        Reviewed by Sam Weinig.

        We'll just send all requests to CFNetwork now, along with associated priorities.

        * WebCore.exp.in: WebKitSystemInterface functions are changing to support priorities
        for more than just pipelining.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceHandle.h: For syncronous requests, make it so that they
        don't count against HTTP connection limit, to avoid the possibility of hanging the process.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toPlatformRequestPriority):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build failure in WebCore::findEndWordBoundary()

        Filed Bug 126830 for the proper fix:
        <http://webkit.org/b/126830>

        * editing/VisibleUnits.cpp:
        (WebCore::endWordBoundary): Switch back to using
        WebCore::findWordBoundary() on iOS.

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findEndWordBoundary): Add FIXME for iOS implementation
        that doesn't use NSAttributedString.

2014-01-11  Andy Estes  <aestes@apple.com>

        [iOS] Move text autosizing code from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126829

        Reviewed by Sam Weinig.

        Some newly-upstreamed iOS text autosizing code needs to move to
        RenderBlockFlow in order to build.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::isVisibleRenderText):
        (WebCore::resizeTextPermitted):
        (WebCore::RenderBlockFlow::immediateLineCount):
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::resetComputedFontSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderObject::resetTextAutosizing):

2014-01-11  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the build

        Only call CGContextFlush() when building for OS X < 10.9.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::deallocate):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        InspectorAgentRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=126826

        Reviewed by Sam Weinig.

        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerRuntimeAgent.h:

2014-01-11  Sam Weinig  <sam@webkit.org>

        Extract the FormatConverter class out of GraphicsContext3D.cpp and into its own file
        https://bugs.webkit.org/show_bug.cgi?id=126820

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FormatConverter.cpp: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::convertFloatToHalfFloat):
        (WebCore::FormatConverter::convert):
        * platform/graphics/FormatConverter.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::FormatConverter::FormatConverter):
        (WebCore::FormatConverter::success):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::computeImageSizeInBytes):
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::hasAlpha):
        (WebCore::GraphicsContext3D::hasColor):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix updateScrollingLayerWithClient() for iOS.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::updateScrollingLayerWithClient):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Unfork GraphicsContext::drawNativeImage for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126824

        Reviewed by Dean Jackson.

        GraphicsContext::drawNativeImage had a different signature for iOS,
        which required #ifdefs at all the call sites. Unfork by passing the "scale"
        parameter everywhere (it's only used on iOS).

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/ios/IconIOS.mm:
        (WebCore::Icon::paint):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Work around USE(CFNETWORK) build failure on iOS.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix LegacyWebArchive.cpp:567:91: error: calling 'utf8' with incomplete return type 'WTF::CString'
        
        * loader/archive/cf/LegacyWebArchive.cpp:

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix the easy half of the build errors in RenderBlock.cpp

        * rendering/RenderBlock.cpp:
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlock::adjustComputedFontSizes):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Change touch-related headers to include WebKitAdditions headers,
        which have been renamed to have IOS suffixes.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ios/TouchConstructors.cpp:
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:
        * dom/ios/TouchEvents.cpp:

2014-01-11  Anders Carlsson  <andersca@apple.com>

        ScriptDebugServer should use a separate member function for its timer handler
        https://bugs.webkit.org/show_bug.cgi?id=126819

        Reviewed by Sam Weinig.

        It's weird to have subclasses override a timer handler and sometimes invoke 
        the timer handler directly so make it a separate member function instead.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::start):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Simplify Timer and DeferrableOneShotTimer using std::function
        https://bugs.webkit.org/show_bug.cgi?id=126816

        Reviewed by Sam Weinig.

        * platform/Timer.h:
        (WebCore::Timer::Timer):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        CTTE Timer and DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126814

        Reviewed by Antti Koivisto.

        Add new Timer and DeferrableOneShotTimer constructors whose member function pointers
        take a reference instead of a pointer.
        Also, convert a bunch of classes over to using these new constructors.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::resumeTimerFired):
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::taskTimerFired):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::evictionTimerFired):
        * css/CSSImageGeneratorValue.h:
        * dom/Document.cpp:
        (WebCore::Document::visualUpdatesSuppressionTimerFired):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::optimizedStyleSheetUpdateTimerFired):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::styleResolverThrowawayTimerFired):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        (WebCore::Document::resetHiddenFocusElementTimer):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::timerFired):
        * dom/GenericEventQueue.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptRunner.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/AlternativeTextController.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/HTMLTrackElement.h:
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::timeupdateTimerFired):
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaDocument.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        * html/parser/HTMLParserScheduler.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::transitionTimerFired):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControls.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * html/track/LoadableTextTrack.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::UpdateRegionLayoutTask::UpdateRegionLayoutTask):
        (WebCore::UpdateRegionLayoutTask::timerFired):
        (WebCore::ChangeRegionOversetTask::ChangeRegionOversetTask):
        (WebCore::ChangeRegionOversetTask::timerFired):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkTimerFired):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::linkLoadTimerFired):
        (WebCore::LinkLoader::linkLoadingErrorTimerFired):
        * loader/LinkLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::timerFired):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        * loader/ResourceLoadScheduler.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::decodedDataDeletionTimerFired):
        (WebCore::CachedResource::CachedResourceCallback::timerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncTimerFired):
        * loader/icon/IconDatabase.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::timerFired):
        * page/CaptionUserPreferences.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connectTimerFired):
        * page/EventSource.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::postLayoutTimerFired):
        * page/FrameView.h:
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::throttleHysteresisTimerFired):
        * page/PageThrottler.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/AnimationControllerPrivate.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        * platform/Scrollbar.h:
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::reloadTimerFired):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::invalidateCacheTimerFired):
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::failureTimerFired):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/ImageQualityController.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::regionLayoutUpdateEventTimerFired):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        #ifdef out the contents of Touch* files for iOS.
        
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        No need to include <ApplicationServices/ApplicationServices.h> in
        the header. Can use <CoreGraphics/CoreGraphics.h> in the .cpp file.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix DOM headers: TARGET_OS_EMBEDDED -> TARGET_OS_IPHONE
        and a drive-by cleanup of DOMUIKitExtensions.mm #includes.

        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h:
        * bindings/objc/DOMUIKitExtensions.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of GL_HALF_FLOAT_ARB on iOS.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix build of SourceBufferPrivateAVFObjC.mm on iOS.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of nonexistent kCGColorSpaceSRGB on iOS.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):

2014-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some ScriptDebugServer Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=126793

        Reviewed by Timothy Hatcher.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        Move the special iOS WebThread EventLoop nesting handling here.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        Remove unused headers and functions.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Add USE(IOSURFACE_CANVAS_BACKING_STORE) to fix build

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): The 'width' and 'height'
        variables are only used by code protected by
        USE(IOSURFACE_CANVAS_BACKING_STORE).

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Multisampling is not available on iOS

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for HTMLImageElement::willRespondToMouseClickEvents()

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::willRespondToMouseClickEvents):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Fix test crashes.
        
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        Comment out the call to progressTrackerDestroyed for now.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for RenderEmbeddedObject::canHaveChildren()

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::canHaveChildren):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tweak ProgressTrackerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=126808

        Reviewed by Sam Weinig.

        Rename the three progress state related member functions since it's up to the various
        WebKit implementations to decide what to do - not everyone wants to post a notification.
        Also add an originating progress frame parameter since WebKit2 doesn't report progress for
        subframe navigation and we need to be able to keep track of that.
        
        Finally, tweak ProgressTracker::completeProgress to get rid of an unnecessary hash lookup.

        * loader/EmptyClients.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        * loader/ProgressTrackerClient.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix COMPILE_ASSERT by updating struct SameSizeAsStyleRareInheritedData

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of SubframeLoader.cpp

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::loadPlugin):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix Mac after r161747. One part of that is iOS specific.

        Unreviewed build fix.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fix GCController::releaseExecutableMemory
        https://bugs.webkit.org/show_bug.cgi?id=126805

        Reviewed by Sam Weinig and Mark Lam.

        VM::dynamicGlobalObject has since been replaced by VMEntryScope.
        Update to check entryScope instead of the dynamicGlobalObject.
        Also, make this non-iOS only.

        * bindings/js/GCController.h:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLMediaElement.o for iOS. Unreviewed build fix.

        There is now local variable mediaElement. Just call the
        functions since they are methods on this class.

        Fix RequireUserGestureToShowPlaybackTargetPickerRestriction typos.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Move progress tracking functions from FrameLoaderClient to a new ProgressTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=126801

        Reviewed by Sam Weinig.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::~ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ProgressTrackerClient.h: Added.
        (WebCore::ProgressTrackerClient::~ProgressTrackerClient):
        (WebCore::ProgressTrackerClient::progressTrackerDestroyed):
        (WebCore::ProgressTrackerClient::willChangeEstimatedProgress):
        (WebCore::ProgressTrackerClient::didChangeEstimatedProgress):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderObject.o for iOS. Unreviewed build fix.

        r156285 renamed firstChild() to firstChildSlow(), so update
        occurances in IOS_TEXT_AUTOSIZING code. Also account for a
        RenderObject::style reference / pointer change.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::traverseNext):
        (WebCore::includeNonFixedHeight):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateMediaSourceAVFObjC.o for iOS. Unreviewed build fix.

        Import CALayer, which Mac must have been getting some other way.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix TileGrid.o for iOS. Unreviewed build fix.

        Explicitly use namespace std in std::pair.

        * platform/ios/TileGrid.mm:
        (WebCore::isFartherAway):
        (WebCore::TileGrid::dropDistantTiles):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderImage.o for iOS. Unreviewed build fix.

        inlineBoxWrapper() returns an InlineElementBox type, which is an InlineBox but
        without including InlineElementBox.h, iOS didn't know what an InlineElementBox was!

        * rendering/RenderImage.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix macros in Scrollbar::supportsUpdateOnSecondaryThread()

        Fixes the following build error:

            WebCore/platform/Scrollbar.cpp:552:22: error: '__MAC_OS_X_VERSION_MIN_REQUIRED' is not defined, evaluates to 0 [-Werror,-Wundef]
            #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000 && ENABLE(ASYNC_SCROLLING)
                                 ^

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderFileUploadControl.o for iOS. Unreviewed build fix.

        WebCore::theme() returns a reference now, not a pointer.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLPlugInImageElement.o for iOS. Unreviewed build fix.

        Forgot to upstream YouTubeEmbedShadowElement.*. Do so and
        add the files to the Xcode project so they build.

        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/YouTubeEmbedShadowElement.cpp: Added.
        (WebCore::YouTubeEmbedShadowElement::create):
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        (WebCore::YouTubeEmbedShadowElement::pluginElement):
        (WebCore::YouTubeEmbedShadowElement::shadowPseudoId):
        * html/shadow/YouTubeEmbedShadowElement.h: Added.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Update EditorIOS.mm to switch from pointers to references

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::insertParagraphSeparatorInQuotedContent):
        (WebCore::styleForSelectionStart):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::WebContentReader::readWebArchive):
        (WebCore::Editor::WebContentReader::readRTFD):
        (WebCore::Editor::WebContentReader::readRTF):
        (WebCore::uniqueURLWithRelativePart):
        (WebCore::Editor::WebContentReader::readPlainText):
        (WebCore::Editor::webContentFromPasteboard):
        (WebCore::Editor::createFragmentAndAddResources):
        (WebCore::Editor::createFragmentForImageResourceAndAddResource):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push InspectorAgent down into JSC, give JSC an InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=126763

        Reviewed by Timothy Hatcher.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agent/InspectorAgent.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        InspectorAgent moved to JavaScriptCore. Include forwarding header.

        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        InspectorAgent was not used by these files, remove it.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorAgent):
        (WebCore::InstrumentingAgents::setInspectorAgent):
        Switch to Inspector::InspectorAgent where applicable.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        Manually add InspectorAgent to the InstrumentingAgents. It is one
        of the agents that is always available in InstrumentingAgents.

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

       Add TextAutoSizing.* for iOS, and fix DeviceOrientationController creation.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * rendering/TextAutoSizing.cpp: Added.
        (WebCore::cloneRenderStyleWithState):
        (WebCore::TextAutoSizingKey::TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::~TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::operator=):
        (WebCore::TextAutoSizingKey::ref):
        (WebCore::TextAutoSizingKey::deref):
        (WebCore::TextAutoSizingValue::numNodes):
        (WebCore::TextAutoSizingValue::addNode):
        (WebCore::TextAutoSizingValue::adjustNodeSizes):
        (WebCore::TextAutoSizingValue::reset):
        * rendering/TextAutoSizing.h: Added.
        (WebCore::TextAutoSizingKey::doc):
        (WebCore::TextAutoSizingKey::style):
        (WebCore::TextAutoSizingKey::isValidDoc):
        (WebCore::TextAutoSizingKey::isValidStyle):
        (WebCore::TextAutoSizingKey::deletedKeyDoc):
        (WebCore::TextAutoSizingKey::deletedKeyStyle):
        (WebCore::operator==):
        (WebCore::TextAutoSizingHash::hash):
        (WebCore::TextAutoSizingHash::equal):
        (WebCore::TextAutoSizingValue::create):
        (WebCore::TextAutoSizingValue::TextAutoSizingValue):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix GraphicsLayerCA.o for iOS. Unreviewed build fix.

        Use of systemMemoryLevel was missing include of SystemMemory.h.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        * bindings/objc/DOMExtensions.h:
        * platform/DragImage.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.
        
        Generated DOMTouch* and DOMGesture* files need to be in the project.
        Exclude them on Mac via EXCLUDED_SOURCE_FILE_NAMES_macosx.
        
        Use TARGET_OS_IPHONE instead of TARGET_OS_EMBEDDED in DOMPrivate.h

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderThemeIOS.o for iOS. Unreviewed build fix.

        Typo referring to generated name. Should be "iOS" not "IOS".

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix WebAccessibilityObjectWrapperIOS.o for iOS. Unreviewed build fix.

        The upstreamed WebAccessibilityObjectWrapperIOS.mm was out of date, e.g.
        it was using GSFonts. Just upstream a newer version of the file. Also
        explicitly namespace qualify std::pair.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetStyle):

2014-01-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove willRespondToTouchEvents() which was used by chromium port
        https://bugs.webkit.org/show_bug.cgi?id=126739

        Reviewed by Alexey Proskuryakov.

        willRespondToTouchEvents() was added to check if a node listens to touch events in r126945.
        However, it is not used anywhere after chromium port is removed.

        * dom/Node.cpp:
        * dom/Node.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix SystemVersionMac.o for iOS. Unreviewed build fix.

        Add missing expected function. Maybe we can avoid including
        this file entirely on iOS, there was already a FIXME.

        * platform/mac/SystemVersionMac.mm:
        (WebCore::systemMarketingVersion):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix JSDOMWindowBase.o for iOS. Unreviewed build fix.

        Add missing iOS method declarations.

        * bindings/js/JSDOMWindowBase.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix InputType.o for iOS. Unreviewed build fix.

        The RuntimeEnabledFeatures function pointer type should have a
        const qualifier, because the implementations are all const.

        * html/InputType.cpp:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateIOS.o for iOS. Unreviewed build fix.

        Add missing MediaPlayerProxy Objective C methods and forward declarations.

        * platform/graphics/mac/MediaPlayerProxy.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameSelection.o for iOS. Unreviewed build fix.

        r160966 renamed rendererIsEditable to hasEditableStyle.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionFromNone):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix DragData.o for iOS. Unreviewed build fix.

        String m_pasteboardName is unused on iOS, so ifdef it out.

        * platform/DragData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameIOS.o for iOS. Unreviewed build fix.

        Remove stale include to file that no longer exists. It was not needed.

        * page/ios/FrameIOS.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876,
        the wrong class name lingered. Fix it to be the base class.

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

2014-01-10  Andy Estes  <aestes@apple.com>

        [iOS] Build fix: make sure WTF_PLATFORM_IOS is defined when preprocessing

        * DerivedSources.make:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Use TARGET_OS_IPHONE in this API file, and #if TARGET_OS_MAC
        for a non-iOS function.

        * bindings/objc/DOMExtensions.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        Clean up architectures in xcconfig files
        <http://webkit.org/b/126794>

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig: Remove armv6.
        * DerivedSources.make: Remove armv6, armv7f. Sort.
        - Add new arch.

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build

        * Configurations/WebCore.xcconfig:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.
        
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * loader/ios/DiskImageCacheIOS.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        iOS build fix: add StyleRareInheritedData::compositionFillColor

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876, the
        BaseMonthInputType typedef was removed. However a use of it lingered.
        Changing to match the base class name.

        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderButton.o for iOS. Unreviewed build fix.

        Missing prototype in header for override of the layout method.

        * rendering/RenderButton.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        A couple of iOS build fixes.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix PlatformScreenIOS.mm for iOS. Unreviewed build fix.

        PlatformScreen.h removed screenVerticalDPI and screenHorizontalDPI in r132419,
        so remove the stale implementations on iOS. Also, add a notImplemented version
        of screenColorProfile, which matches Mac and is unused in WebCore for this port.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorProfile):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE FrameTree
        https://bugs.webkit.org/show_bug.cgi?id=126795

        Reviewed by Tim Horton.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::transferChild):
        (WebCore::FrameTree::appendChild):
        (WebCore::FrameTree::actuallyAppendChild):
        (WebCore::FrameTree::uniqueChildName):
        (WebCore::FrameTree::scopedChild):
        (WebCore::FrameTree::scopedChildCount):
        (WebCore::FrameTree::child):
        (WebCore::FrameTree::find):
        (WebCore::FrameTree::isDescendantOf):
        (WebCore::FrameTree::traverseNext):
        (WebCore::FrameTree::traverseNextWithWrap):
        (WebCore::FrameTree::traversePreviousWithWrap):
        (WebCore::FrameTree::deepLastChild):
        (WebCore::FrameTree::top):
        * page/FrameTree.h:
        (WebCore::FrameTree::FrameTree):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * loader/ResourceLoader.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::acceleratedImageDecodingEnabled):
        (WebCore::ImageSource::setAcceleratedImageDecodingEnabled):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed EFL build fix after r161678.

        static_cast a size_t to unsigned long for %lu format string.

        * page/Console.cpp:
        (WebCore::internalAddMessage):

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/NativeImagePtr.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addPathForRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::getGraphicsResetStatusARB):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix CharsetData.cpp build for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126792

        Reviewed by Mark Rowe.

        CharsetData.cpp should have an empty CharsetTable list for iOS.
        Achieve this with an iOS-specific encodings.txt file.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/mac/ios-encodings.txt: Added.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=126788

        Reviewed by Tim Horton.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::shouldStartTimer):
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::NavigationScheduler::NavigationScheduler):
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::shouldScheduleNavigation):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::schedule):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/NavigationScheduler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):

2014-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        CSS word-spacing property does not obey percentages
        https://bugs.webkit.org/show_bug.cgi?id=126674

        Reviewed by Simon Fraser.

        One change between CSS2.1 and CSS3 is that the word-spacing CSS property can
        take percentages (of the width of the space character) in CSS3. In order to
        implement this, the datatype must be changed from a float to a Length, which
        can hold percentage values. Then, during layout, we can query the width of
        the space character and update the Font's word-spacing value appropriately.
        However, the RenderStyle still holds on to the Length (as a rare inherited
        value).

        Tests: fast/css3-text/css3-word-spacing-percentage/word-spacing-change-font.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage-parse.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Use Font's computed value instead
        of style's Length value.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): word-spacing and letter-spacing no longer are
        parsed the same way.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyWordSpacing::applyValue): Construct a length from a given
        CSSValue and set the style's word spacing with it.
        (WebCore::ApplyPropertyWordSpacing::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Use ApplyPropertyWordSpacing.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Use Font's computed value instead
        of style's Length value.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths): Ditto.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Opt-out of the SimpleLineLayout
        if either the percentage or the length is nonzero.
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText): Use Font's computed value instead
        of style's Length value.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::setWordSpacing): Consult the Font's space with to compute
        percentage values, but hold on to the original Length.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareInheritedData.h: Hold on to the specified Length

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * platform/audio/mac/MediaSessionManagerMac.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        iOS doesn't have <OpenGL/gl.h>; fix iOS build.

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:

2014-01-10  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: Properly add $SDKROOT/usr/local/include/ to the search path when building PublicDOMInterfaces.h

        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unimplemented or static ScriptDebugServer features
        https://bugs.webkit.org/show_bug.cgi?id=126784

        Reviewed by Timothy Hatcher.

        These features are unimplemented in the backend, and unused by the
        current frontend. Most deal with features that were supported by v8
        and are as yet unimplemented by JSC. If we decide to add such features
        we can reimplement without conforming to an old implementation.

        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfiler.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/protocol/Page.json:
        * inspector/protocol/Profiler.json:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Remove unused variable from TileGrid::dropTilesBetweenRects()

        Fixes the following build error:

            WebCore/platform/ios/TileGrid.mm:88:23: error: unused variable 'end' [-Werror,-Wunused-variable]
                TileMap::iterator end = m_tiles.end();
                                  ^

        * platform/ios/TileGrid.mm:
        (WebCore::TileGrid::dropTilesBetweenRects): Remove unused
        variable now that the for loop uses an auto iterator.

2014-01-10  Dean Jackson  <dino@apple.com>

        Implement OES texture half float linear
        https://bugs.webkit.org/show_bug.cgi?id=125060

        Reviewed by Brent Fulgham.

        Test: fast/canvas/webgl/oes-texture-half-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureHalfFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map from extension name to native object.

        * html/canvas/OESTextureHalfFloatLinear.cpp: Added. New files. These are boiler-plate.
        * html/canvas/OESTextureHalfFloatLinear.h: Added.
        * html/canvas/OESTextureHalfFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Add new enum for the new extension.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension): Create the extension object if the
        context is asked for one.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add the new extension to the
        list of supported extensions. Actually remember to do it this time :)
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Need to check for the half-float
        extension as well, and update the log message.
        * html/canvas/WebGLRenderingContext.h: New extension object.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Check for half-float type.
        (WebCore::WebGLTexture::update): Mark a texture as half-float if necessary.
        * html/canvas/WebGLTexture.h:

        * platform/graphics/Extensions3D.h: Add a comment about the new extension.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): This extension is available
        when GL_ARB_texture_float is supported, so add the name to the translation.

2014-01-10  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct uniform input validation for texture sampler uniform
        https://bugs.webkit.org/show_bug.cgi?id=126775

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/uniform-samplers-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::uniform1iv): Access Int32Array data properly.

2014-01-10  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Unreviewed build fix after r161644.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove an unused FrameLoader function
        https://bugs.webkit.org/show_bug.cgi?id=126785

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setState):
        * loader/FrameLoader.h:

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/PlatformMouseEvent.h:
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/URL.cpp:
        (WebCore::URL::parse):
        (WebCore::portAllowed):
        * platform/Widget.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Clean up and fix some issues with stdout formatting of console messages.

        * Fix URLs not printing line numbers unless column number is > 0.
        * Change "CONSOLEAPI" to "CONSOLE" for the source.
        * Clean up how console.trace outputs and print URL, line and column for each frame.
        * Print "(unknown)" for anonymous and native code call frames.

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

        Reviewed by Joseph Pecoraro.

        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        * page/PageConsole.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fill in missing WebCoreThread function pointers
        https://bugs.webkit.org/show_bug.cgi?id=126776

        Reviewed by Timothy Hatcher.

        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        (InitWebCoreThreadSystemInterface):

2014-01-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Clear unparented tiled layers on memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=126737

        Reviewed by Simon Fraser.

        TileController hold unparented tiles for a short period of time (1 -3 sec); we should clear these unparented
        tiles immediately if we are under memory pressure.
        
        The patch does 3 things to improve the behavior:
        1) When the system free memory is low (<35%), reduce the tiling threshold.  This could reduce
        the peak memory usage when system is under low memory since we will convert more web layers into
        tiled backing.
        2) Under memory pressure, immediately clear all unparented tiles.
        3) Add a cap (16 tiles) to limit the total number of unparented tiles in TileController's.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add a new class TileControllerMemoryHandler.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::requiresTiledLayer):  Use a smaller tiling threshold if the system free memory is low.
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::numberOfUnparentedTiles):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::startedNewCohort):
        (WebCore::TileController::removeUnparentedTilesNow): Remove all unparentd tiles.
        * platform/ios/MemoryPressureHandlerIOS.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp: Added.
        (WebCore::TileControllerMemoryHandler::removeTileController):
        (WebCore::TileControllerMemoryHandler::totalUnparentedTiledLayers):
        (WebCore::TileControllerMemoryHandler::tileControllerGainUnparentedTiles):
        (WebCore::TileControllerMemoryHandler::trimUnparentedTilesToTarget): Trims the number of unparented tiles until
            it reaches the target.
        (WebCore::tileControllerMemoryHandler):
        * platform/ios/TileControllerMemoryHandlerIOS.h: Added.
        (WebCore::TileControllerMemoryHandler::TileControllerMemoryHandler):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [CSS Blending] Log blending as a layer creation reason in the WI
        https://bugs.webkit.org/show_bug.cgi?id=126159

        Reviewed by Timothy Hatcher.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/protocol/LayerTree.json:

2014-01-10  Andy Estes  <aestes@apple.com>

        Fix some iOS build errors during bindings generation.

        * bindings/objc/PublicDOMInterfaces.h: Included
        WebKitAdditions/PublicDOMInterfacesIOS.h and change
        -[DOMRGBColor color] to return a CGColorRef on iOS.

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Prevent some resources from showing up in Web Inspector as years in duration.

        No WebKit port passed a monotonic time to InspectorInstrumentation::didFinishLoading -- except Chromium.

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

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        Revert part of r102961 to use finishTime as-is and not expect a monotonic time.

2014-01-10  Dirk Schulze  <krit@webkit.org>

        Make clipping path from basic-shapes relative to <box> value
        https://bugs.webkit.org/show_bug.cgi?id=126206

        Reviewed by Simon Fraser.

        Tests: css3/masking/clip-path-circle-border-box.html
               css3/masking/clip-path-circle-bounding-box.html
               css3/masking/clip-path-circle-content-box.html
               css3/masking/clip-path-circle-margin-box.html
               css3/masking/clip-path-circle-padding-box.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Add switch to differ between boxes
            and use different reference boxes to size the clipping path.

2014-01-10  Youenn Fablet  <youennf@gmail.com>


        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)
        
        Fixed assertion issues over bug 120828 patch

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

2014-01-10  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Change parseBasicShape to return a CSSPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=126713

        Reviewed by Dirk Schulze.

        Avoid the duplicated code wrapping the CSSBasicShape in a CSSPrimitiveValue
        by having parseBasicShape return a CSSPrimitiveValue reference.

        Refactoring, no new tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:

2014-01-10  Piotr Grad  <p.grad@samsung.com>

        Possible crash in ApplicationCache::removeResource.
        https://bugs.webkit.org/show_bug.cgi?id=126695

        Reviewed by Alexey Proskuryakov.

        No new tests.

        Iterator variable was used after it was removed.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Another build fix for the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Move the logic for appending the port-specific IDL files {Touch, TouchEvent, TouchList}.idl to the
        list of binding IDLs (BINDING_IDLS) before the definition of variables DOM_CLASSES and JS_DOM_HEADERS
        so that we generate the DOM and JS bindings for these IDLs.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove supportMultipleWindows setting
        https://bugs.webkit.org/show_bug.cgi?id=126772

        Reviewed by Beth Dakin.

        This setting was added in https://bugs.webkit.org/show_bug.cgi?id=99716 for the Chromium port
        and is unused by everyone else so get rid of it.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/Settings.in:

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h:
        * dom/ViewportArguments.cpp:
        * dom/ViewportArguments.h:
        * history/HistoryItem.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * page/NavigatorBase.cpp:
        * page/Settings.cpp:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * platform/Cursor.cpp:
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/DragData.h:
        * platform/DragImage.h:
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::initProtocolHandlerWhitelist):
        * UseJSC.cmake:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        * bindings/js/GCController.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the WebCore, WebKit build targets following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Tell Xcode that the supported platforms for all WebKit targets are iOS and OS X.

        * Configurations/Base.xcconfig:

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream iOS changes to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=126731

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj: Mark an iOS-specific header at
        Private that will later be migrated by WebKit.

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_ for JAVASCRIPTCORE_PRIVATE_HEADERS_Production_.

        * Configurations/WebCore.xcconfig:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Add a missing include.

        * Modules/webdatabase/DatabaseManager.h:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Use STL threading primitives in DatabaseDetails and DatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=126759

        Reviewed by Geoffrey Garen.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::threadID):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

2014-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161629.
        http://trac.webkit.org/changeset/161629
        https://bugs.webkit.org/show_bug.cgi?id=126762

        Fails svg/custom/conditional-processing-2.html (Requested by
        ap on #webkit).

        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r161589.

        The changeset causes a compile failure with --no-svg.

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

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Removing unnecessary pointer checks
        https://bugs.webkit.org/show_bug.cgi?id=124046

        Reviewed by Brent Fulgham.

        We do not need to check for a null array three times in
        the same call. Let's just do it once!

        No new tests. Covered by existing ones.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferData):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Speculative build fix for Windows following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Reviewed by David Kilzer.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Wrong condition order in the if statement
        https://bugs.webkit.org/show_bug.cgi?id=125000

        Reviewed by Brent Fulgham.

        We should only pay the cost of string comparison once. The
        current logic requires a string comparison every time we
        pass through the function. Instead, by reordering the statements
        we can short-circuit through the boolean test after the initial
        setup is complete.

        No new tests. No behaviour changes.

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::supportsExtension):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in AudioContext::AutoLocker
        https://bugs.webkit.org/show_bug.cgi?id=126758

        Reviewed by Antti Koivisto.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect):
        (WebCore::AudioBasicInspectorNode::disconnect):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::refNode):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::removeMarkedSummingJunction):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::AutoLocker::AutoLocker):
        (WebCore::AudioContext::AutoLocker::~AutoLocker):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::setOversample):

2014-01-10  Antti Koivisto  <antti@apple.com>

        Use element iterators more
        https://bugs.webkit.org/show_bug.cgi?id=126756

        Reviewed by Anders Carlsson.

        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::invalidateStyleForAllLinks):
        (WebCore::VisitedLinkState::invalidateStyleForLink):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::renderMeter):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::renderProgress):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        * style/StyleResolveTree.cpp:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/audio/ios/AudioSessionIOS.mm: Import header PassOwnPtr.h so that we can use adoptPtr().

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute tab characters for space characters.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        DOMWindow::showModalDialog should use std::function
        https://bugs.webkit.org/show_bug.cgi?id=126753

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::JSDOMWindow::showModalDialog):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore and Tools miscellaneous changes
        https://bugs.webkit.org/show_bug.cgi?id=126698

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Configurations/iOS.xcconfig: Added.
        * DerivedSources.make:
        * English.lproj/Localizable.strings:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Copied from Source/WebCore/editing/TextAffinity.h.
        (WebCore::stringForPlaybackTargetAvailability):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: Added.
        (WebCore::WebKitPlaybackTargetAvailabilityEventInit::WebKitPlaybackTargetAvailabilityEventInit):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl: Copied from Source/WebCore/editing/DeleteButton.h.
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::canSuspend):
        (WebCore::Geolocation::suspend):
        (WebCore::Geolocation::resume):
        (WebCore::Geolocation::resumeTimerFired):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::setError):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::resetAllGeolocationPermission):
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::speak):
        * Modules/speech/SpeechSynthesis.h:
        (WebCore::SpeechSynthesis::userGestureRequiredForSpeechStart):
        (WebCore::SpeechSynthesis::removeBehaviorRestriction):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::setPaused):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused):
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        (WebCore::DatabaseUnpauseTask::create):
        (WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused):
        (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
        (WebCore::DatabaseUnpauseTask::doPerformTask):
        (WebCore::DatabaseUnpauseTask::debugTaskName):
        (WebCore::DatabaseThread::setPaused):
        (WebCore::DatabaseThread::handlePausedQueue):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::isZeroByteFile):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
        (WebCore::DatabaseTracker::setDatabasesPaused):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::shouldPerformWhilePaused):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Resources/DictationPhraseWithAlternativesDot.png: Added.
        * Resources/DictationPhraseWithAlternativesDot@2x.png: Added.
        * Resources/SpellingDot.png: Added.
        * Resources/SpellingDot@2x.png: Added.
        * Resources/decrementArrow.tiff: Added.
        * Resources/hScrollControl_left.png: Added.
        * Resources/hScrollControl_middle.png: Added.
        * Resources/hScrollControl_right.png: Added.
        * Resources/incrementArrow.tiff: Added.
        * Resources/markedLeft.png: Added.
        * Resources/markedMiddle.png: Added.
        * Resources/markedRight.png: Added.
        * Resources/vScrollControl_bottom.png: Added.
        * Resources/vScrollControl_middle.png: Added.
        * Resources/vScrollControl_top.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::releaseExecutableMemory):
        * bindings/js/GCController.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSDOMWindowBase::commonVM):
        (WebCore::JSDOMWindowBase::commonVMExists):
        (WebCore::JSDOMWindowBase::commonVMInternal):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::touch):
        (WebCore::JSDOMWindow::touchList):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
        (WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSTouchCustom.cpp:
        * bindings/js/JSTouchListCustom.cpp:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ios/TouchConstructors.cpp: Added.
        * bindings/objc/DOM.mm:
        (WebCore::wkQuadFromFloatQuad):
        (WebCore::kit):
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::emptyQuad):
        (-[WKQuadObject initWithQuad:]):
        (-[WKQuadObject quad]):
        (-[WKQuadObject boundingBox]):
        (-[DOMNode boundingBox]):
        (-[DOMNode absoluteQuad]):
        (-[DOMNode absoluteQuadAndInsideFixedPosition:]):
        (-[DOMNode boundingBoxUsingTransforms]):
        (-[DOMNode lineBoxQuads]):
        (-[DOMNode _linkElement]):
        (-[DOMNode hrefURL]):
        (-[DOMNode hrefTarget]):
        (-[DOMNode hrefFrame]):
        (-[DOMNode hrefLabel]):
        (-[DOMNode hrefTitle]):
        (-[DOMNode boundingFrame]):
        (-[DOMNode innerFrameQuad]):
        (-[DOMNode computedFontSize]):
        (-[DOMNode nextFocusNode]):
        (-[DOMNode previousFocusNode]):
        (-[DOMRange boundingBox]):
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        (-[DOMElement _font]):
        (-[DOMHTMLLinkElement _mediaQueryMatchesForOrientation:]):
        (-[DOMHTMLLinkElement _mediaQueryMatches]):
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement scrollYOffset]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
        (-[DOMHTMLElement absolutePosition::::]):
        (-[DOMHTMLInputElement _autocapitalizeType]):
        (-[DOMHTMLTextAreaElement _autocapitalizeType]):
        (-[DOMHTMLInputElement setValueWithChangeEvent:]):
        (-[DOMHTMLInputElement setValueAsNumberWithChangeEvent:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (wrapperCacheLock):
        (getDOMWrapper):
        (addDOMWrapper):
        (removeDOMWrapper):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h: Added.
        * bindings/objc/DOMUIKitExtensions.mm: Added.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GetClassName):
        (IsCoreFoundationType):
        (GetObjCType):
        (AddIncludesForType):
        (GenerateHeader):
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_instance.mm:
        * config.h:
        * dom/Document.cpp:
        (WebCore::Document::addAutoSizingNode):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/ios/TouchEvents.cpp: Added.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::disable):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        * editing/EditAction.h:
        * editing/EditCommand.h:
        (WebCore::EditCommand::isInsertTextCommand):
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::ClearTextCommand):
        (WebCore::ClearTextCommand::editingAction):
        (WebCore::ClearTextCommand::CreateAndApply):
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::clearText):
        (WebCore::Editor::insertDictationPhrases):
        (WebCore::Editor::setDictationPhrasesAsChildOfElement):
        (WebCore::Editor::confirmMarkedText):
        (WebCore::Editor::setTextAsChildOfElement):
        (WebCore::Editor::notifyComponentsOnChangedSelection):
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::Editor::copy):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::shouldChangeSelection):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeClearText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):
        (WebCore::enabledClearText):
        (WebCore::createCommandMap):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelection):
        (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::setSelectedRange):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection):
        (WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection):
        (WebCore::FrameSelection::elementRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToWordContainingCaretSelection):
        (WebCore::FrameSelection::wordRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToStartOfWordContainingCaretSelection):
        (WebCore::FrameSelection::characterInRelationToCaretSelection):
        (WebCore::FrameSelection::characterBeforeCaretSelection):
        (WebCore::FrameSelection::characterAfterCaretSelection):
        (WebCore::FrameSelection::wordOffsetInRange):
        (WebCore::FrameSelection::spaceFollowsWordInRange):
        (WebCore::FrameSelection::selectionAtDocumentStart):
        (WebCore::FrameSelection::selectionAtSentenceStart):
        (WebCore::FrameSelection::selectionAtWordStart):
        (WebCore::FrameSelection::rangeByMovingCurrentSelection):
        (WebCore::FrameSelection::rangeByExtendingCurrentSelection):
        (WebCore::FrameSelection::selectRangeOnElement):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::actualSelectionAtSentenceStart):
        (WebCore::FrameSelection::rangeByAlteringCurrentSelection):
        (WebCore::FrameSelection::clearCurrentSelection):
        (WebCore::FrameSelection::setCaretBlinks):
        (WebCore::FrameSelection::setCaretColor):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::suppressCloseTyping):
        (WebCore::FrameSelection::restoreCloseTyping):
        (WebCore::FrameSelection::setUpdateAppearanceEnabled):
        (WebCore::FrameSelection::suppressScrolling):
        (WebCore::FrameSelection::restoreScrolling):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doReapply):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextAffinity.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextGranularity.h:
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::FriendlyEditCommand::setEndingSelection):
        (WebCore::TypingCommand::setEndingSelectionOnLastInsertCommand):
        * editing/TypingCommand.h:
        * editing/VisiblePosition.h:
        (WebCore::operator<):
        (WebCore::operator>):
        (WebCore::operator<=):
        (WebCore::operator>=):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::directionIsDownstream):
        (WebCore::atBoundaryOfGranularity):
        (WebCore::withinTextUnitOfGranularity):
        (WebCore::nextCharacterBoundaryInDirection):
        (WebCore::nextWordBoundaryInDirection):
        (WebCore::nextSentenceBoundaryInDirection):
        (WebCore::nextLineBoundaryInDirection):
        (WebCore::nextParagraphBoundaryInDirection):
        (WebCore::nextDocumentBoundaryInDirection):
        (WebCore::positionOfNextBoundaryOfGranularity):
        (WebCore::enclosingTextUnitOfGranularity):
        (WebCore::distanceBetweenPositions):
        (WebCore::wordRangeFromPosition):
        (WebCore::closestWordBoundaryForPosition):
        * editing/VisibleUnits.h:
        * editing/ios/DictationCommandIOS.cpp: Added.
        * editing/ios/DictationCommandIOS.h: Added.
        (WebCore::DictationCommandIOS::create):
        (WebCore::DictationCommandIOS::editingAction):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * fileapi/AsyncFileStream.cpp:
        * generate-export-file: Added.
        * inspector/InspectorCounters.h:
        * inspector/InspectorFrontendHost.h:
        * make-export-file-generator:
        * plugins/PluginPackage.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::willProvidePluginLayer):
        (WebCore::PluginViewBase::attachPluginLayer):
        (WebCore::PluginViewBase::detachPluginLayer):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementImplicitVisibility):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        (WebCore::Internals::isSelectPopupVisible):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        (WebCore::MediaPlayerPrivateIOS::engineDescription): Adding missing return keyword.

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove unused CSSParser::parseFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=126749

        Reviewed by Antti Koivisto.

        There are two versions of CSSParser::parseFlowThread. Remove the unused one:
        bool parseFlowThread(const String& flowName);

        Tests: No tests, code cleanup.

        * css/CSSParser.cpp:
        * css/CSSParser.h:

2014-01-10  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Build fix after r161589.
        https://bugs.webkit.org/show_bug.cgi?id=126747

        Reviewed by Anders Carlsson.

        * platform/network/ResourceHandle.cpp:
        Include NotImplemented.h for all platforms.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Convert some for loops over to range-based for
        https://bugs.webkit.org/show_bug.cgi?id=126752

        Reviewed by Antti Koivisto.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::clearStorageID):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::estimatedSizeInStorage):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::startTimeResponse):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tighten up two functions in the inspector code
        https://bugs.webkit.org/show_bug.cgi?id=126751

        Reviewed by Antti Koivisto.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        * inspector/InspectorPageAgent.h:

2014-01-10  Antti Koivisto  <antti@apple.com>

        Crash when mutating SVG text with transform
        https://bugs.webkit.org/show_bug.cgi?id=126744

        Reviewed by Dirk Schulze.

        Test: svg/custom/mutation-text-transform-crash.html
        
        Text-transform property triggers subtreeTextDidChange when an SVG text renderer is
        being added to the render tree. The function assumes the child is already fully in the tree
        but in this case we are still in middle of adding it.

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeTextDidChange):
        
            Bail out if the changed RenderSVGInlineText can't be found from m_layoutAttributes.
            This means that subtreeChildWasAdded hasn't been invoked yet for it and there is nothing
            to update. The required updates will happen in subtreeChildWasAdded.

2014-01-10  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Dirk Schulze.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  Mihai Tica  <mitica@adobe.com>

        Add support for blendmode to Core Animation layer.
        Patch by Rik Cabanier, Dean Jackson and Mihai Tica.

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

        Reviewed by Dirk Schulze.

        Tests: css3/compositing/blend-mode-layers.html
               css3/compositing/blend-mode-overflow.html
               css3/compositing/blend-mode-reflection.html
               css3/compositing/blend-mode-should-not-have-compositing-layer.html
               css3/compositing/blend-mode-simple.html

        * WebCore.exp.in: export PlatformCALayer::setBlendMode for WebKit::PlatformCALayerRemote
        * WebCore.xcodeproj/project.pbxproj: Add PlatformCAFiltersMac.h
        * platform/graphics/GraphicsLayer.cpp: add blendMode member
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::blendMode):
        (WebCore::GraphicsLayer::setBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setBlendMode):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): add call to updateBlendMode()
        (WebCore::GraphicsLayerCA::updateBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.h: Added.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer): set a compositing CAFilter on CALayer
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setBlendMode): call to PlatformCAFilters::setBlendingFiltersOnLayer
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateBlendMode):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::setBlendMode):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState): add m_subtreeHasBlending member
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): promote layer if subtree has blending
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing): log blending reason
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): add blending reason
        * rendering/RenderLayerCompositor.h:

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Implement visual overflow computation for inline elements
        https://bugs.webkit.org/show_bug.cgi?id=125291

        Reviewed by David Hyatt.

        The patch implements visual overflow computation for inline elements per region. The algorithm
        uses the container region of each root line box to determine the lines in a region generated by
        a RenderInline. The overflow of a RenderInline inside a region is the smallest rectangle that fits
        all the line boxes belonging to that region.

        The patch also correctly flips for writing mode the overflow of a renderer before clipping with it.

        Tests: fast/regions/overflow-in-variable-width-regions-inline-bt.html
               fast/regions/overflow-in-variable-width-regions-inline-continuation.html
               fast/regions/overflow-in-variable-width-regions-inline-lr.html
               fast/regions/overflow-in-variable-width-regions-inline-rl.html
               fast/regions/overflow-in-variable-width-regions-inline.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): Always create line boxes for RenderInline
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInRegion):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] .mp3 media document controls missing their background
        https://bugs.webkit.org/show_bug.cgi?id=126683

        Reviewed by Eric Carlson.

        Test: media/media-document-audio-controls-visible.html

        <video> elements in a media document are created with an intrinsic size of 300x1,
        with the expectation that either the size will be updated if the media has a video
        track, or the controls will visibly overflow if the media is audio-only. Since the
        shadow root is a flex-box, the panel was being collapsed to 1px high, so give the panel
        a minimum height to prevent that. Also, disable "fading out" the controls in a
        media document for an audio-only file by adding a "no-video" class to the panel
        and adding a media document-only rule to force the controls to always be visible.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel.no-video):
        (audio::-webkit-media-controls-panel):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Call updateHasVideo().
        (Controller.prototype.addVideoListeners): Add video track listeners.
        (Controller.prototype.removeVideoListeners): Remove same.
        (Controller.prototype.updateHasVideo): Add a 'no-video' class to the panel if
            the video element has no video tracks.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Clean up ProgressTracker a little
        https://bugs.webkit.org/show_bug.cgi?id=126738

        Reviewed by Dan Bernstein.

        Use Frame& where the frame can never be null, avoid an extra hash lookup and
        switch the m_progressItems map over to std::unique_ptr.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameProgressTracker::progressStarted):
        (WebCore::FrameLoader::FrameProgressTracker::progressCompleted):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):

2014-01-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix a build break on EFL debug build
        https://bugs.webkit.org/show_bug.cgi?id=126735

        Reviewed by Anders Carlsson.

        No new tests, just build fix.

        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):  Add parentheses.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Remove unused FrameLoader member functions
        https://bugs.webkit.org/show_bug.cgi?id=126734

        Reviewed by Andreas Kling.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up. Also
        remove a few stale functions that are not used and accidentally
        got added back in when the file changed names.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Dean Jackson  <dino@apple.com>

        [WebGL] Expose texture_float_linear and texture_half_float to getSupportedExtensions
        https://bugs.webkit.org/show_bug.cgi?id=126732

        Reviewed by Tim Horton.

        When I added support for these two extensions, I forgot to add their
        names to the list in getSupportedExtensions.

        Covered by the Khronos test: conformance/extensions/get-extension.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add OES_texture_float_linear
        and OES_texture_half_float if the WebGL context supports them.

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Revert r161611, incorrect fix, will fix better.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Scrubbing performance of HD content with software decoding is poor.
        https://bugs.webkit.org/show_bug.cgi?id=126705

        Reviewed by Eric Carlson.

        Instead of issuing a new seek before the previous one completes, wait until that seek's
        completion handler is called, and then issue the new seek. This has the added benefit of
        coalescing multiple incoming seeks so that only the last one is acted upon.

        Save the parameters passed into seekToTime and bind them together in a std::function
        to be replayed once the in-flight seek completes. To handle the case where a completion
        handler fires after the media player is destroyed, add a weakPtrFactory and pass a
        WeakPtr into the completion handler.
        
        Clean up some ivars which are no longer necessary: remove m_seekCount and m_seekTime.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Initialize the
            WeakPtrFactory.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance):
        (WebCore::MediaPlayerPrivateAVFoundation::seeking): m_seekTime -> m_seeking.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::finishSeek):

2014-01-08  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Report the intrinsic size of the media element
        https://bugs.webkit.org/show_bug.cgi?id=125156

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize): Pass to MediaSourcePrivateAVFObjC.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeChanged): Added; Pass to MediaPlayer.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::naturalSize): Return the union of the naturalSizes of all active buffers.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset): Notify the media player that the size changed.
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize): Return the size of the selected video track.
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack): Made const.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::naturalSize): Return the size of the AVAssetTrack.

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Simon Fraser  <simon.fraser@apple.com>

        Enable async scrolling for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126730

        Reviewed by Tim Horton.

        Turn on ENABLE_ASYNC_SCROLLING for iOS.
        
        Disable rubber-banding and scrollbar-related Mac code for PLATFORM(IOS),
        provide stubs for scrolling nodes and scrolling state nodes, and an
        iOS scrolling tree, and scrolling coordinator.
        
        Move crollingCoordinator::create() into the platform implementation file.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isScrollingTreeIOS):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h: Copied from Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h.
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::~ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::pageDestroyed):
        (WebCore::ScrollingCoordinatorIOS::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorIOS::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired):
        (WebCore::ScrollingCoordinatorIOS::commitTreeState):
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Added.
        (WebCore::ScrollingTreeIOS::create):
        (WebCore::ScrollingTreeIOS::ScrollingTreeIOS):
        (WebCore::ScrollingTreeIOS::~ScrollingTreeIOS):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ScrollingTreeIOS::invalidate):
        (WebCore::ScrollingTreeIOS::commitNewTreeState):
        (WebCore::ScrollingTreeIOS::updateMainFrameScrollPosition):
        (WebCore::ScrollingTreeIOS::createNode):
        * page/scrolling/ios/ScrollingTreeIOS.h: Copied from Source/WebCore/page/scrolling/ThreadedScrollingTree.h.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h: Added.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm: Added.
        (WebCore::ScrollingTreeScrollingNodeIOS::create):
        (WebCore::ScrollingTreeScrollingNodeIOS::ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::~ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollBy):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:

2014-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        text-decoration-skip: ink does not work with line wraps
        https://bugs.webkit.org/show_bug.cgi?id=126729

        Reviewed by Simon Fraser.

        InlineTextBox's m_start and m_length fields are offsets into the renderer's string,
        not the generated TextRun. Because of this distinction, when multiple InlineTextBoxes
        were constructed for the same element, all the subsequent elements would use incorrect
        indices and therefore not have skipping decorations.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-multiline.html

        * platform/graphics/Font.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::dashesForIntersectionsWithRect):
        * rendering/TextPainter.h:

2014-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove remaining blackberry files I could find in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * PlatformBlackBerry.cmake: Removed.
        * Resources/blackberry: Removed.
        * css/mediaControlsBlackBerry.css: Removed.
        * css/mediaControlsBlackBerryFullscreen.css: Removed.
        * css/themeBlackBerry.css: Removed.
        * editing/blackberry: Removed.
        * history/blackberry: Removed.
        * html/shadow/MediaControlsBlackBerry.cpp: Removed.
        * html/shadow/MediaControlsBlackBerry.h: Removed.
        * page/blackberry: Removed.
        * page/scrolling/blackberry: Removed.
        * plugins/blackberry: Removed.

2014-01-09  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Return filtered results for getProgramParameter for ACTIVE_ATTRIBUTES and ACTIVE_UNIFORMS
        https://bugs.webkit.org/show_bug.cgi?id=126718
        <rdar://problem/15202048>

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html and
        webgl/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getActiveAttrib): Added loging.
        (WebCore::WebGLRenderingContext::getActiveUniform): Added logging.
        (WebCore::WebGLRenderingContext::getAttribLocation): Drive-by-fix. Return
        -1 on link failure (an invalid location) rather than 0 (a valid
        location) when link fails.
        (WebCore::WebGLRenderingContext::getProgramParameter): Use new
        method to return filtered count.
        (WebCore::WebGLRenderingContext::getUniformLocation): Use nullptr
        rather than returning 0.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::ActiveShaderSymbolCounts):
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::countForType):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch): Drive-by-fix. Don't
        copy giant objects to read a single value.
        (WebCore::GraphicsContext3D::compileShader): Release filtered count
        when we change shader source code.
        (WebCore::GraphicsContext3D::getActiveAttribImpl): Renamed from getActiveAttrib.
        (WebCore::GraphicsContext3D::getActiveAttrib): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::getActiveUniformImpl): Renamed from getActiveUniform.
        (WebCore::GraphicsContext3D::getActiveUniform): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::originalSymbolName): Use C++11 loop.
        (WebCore::GraphicsContext3D::getAttribLocation): Added logging.
        (WebCore::GraphicsContext3D::getNonBuiltinActiveSymbolCount): Added.
        (WebCore::GraphicsContext3D::getShaderiv): Const correctness.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Ditto.
        (WebCore::GraphicsContext3D::getShaderSource): Ditto.

2014-01-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] First line gets incorrectly adjusted in shape-inside due to rounding
        https://bugs.webkit.org/show_bug.cgi?id=126601

        Reviewed by Bem Jones-Bey.

        In order to get consistent results of the first fit position of the content in shapes,
        firstIncludedIntervalLogicalTop should take a FloatSize rather than LayoutSize for
        minLogicalIntervalSize, because LayoutSize clamps the float value to int, when subpixel-layout
        is disabled, thus firstIncludedIntervalLogicalTop could end up calculating with an unprecize
        value. This change modifies firstIncludedIntervalLogicalTop to take FloatSize consistently.

        Test: fast/shapes/shape-inside/shape-inside-polygon-rounded-first-fit.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::adjustLogicalLineTop):
        (WebCore::ShapeInsideInfo::computeFirstFitPositionForFloat):

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream WAK
        https://bugs.webkit.org/show_bug.cgi?id=126724

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig: Excluded new iOS-specific Private
        headers on the Mac build.
        * WebCore.xcodeproj/project.pbxproj: Added new files to the project.
        * platform/ios/wak/WAKAppKitStubs.h: Added.
        * platform/ios/wak/WAKAppKitStubs.m: Added.
        * platform/ios/wak/WAKClipView.h: Added.
        * platform/ios/wak/WAKClipView.m: Added.
        * platform/ios/wak/WAKResponder.h: Added.
        * platform/ios/wak/WAKResponder.m: Added.
        * platform/ios/wak/WAKScrollView.h: Added.
        * platform/ios/wak/WAKScrollView.mm: Added.
        * platform/ios/wak/WAKView.h: Added.
        * platform/ios/wak/WAKView.mm: Added.
        * platform/ios/wak/WAKViewPrivate.h: Added.
        * platform/ios/wak/WAKWindow.h: Added.
        * platform/ios/wak/WAKWindow.mm: Added.
        * platform/ios/wak/WKContentObservation.cpp: Added.
        * platform/ios/wak/WKContentObservation.h: Added.
        * platform/ios/wak/WKGraphics.h: Added.
        * platform/ios/wak/WKGraphics.mm: Added.
        * platform/ios/wak/WKTypes.h: Added.
        * platform/ios/wak/WKUtilities.c: Added.
        * platform/ios/wak/WKUtilities.h: Added.
        * platform/ios/wak/WKView.h: Added.
        * platform/ios/wak/WKView.mm: Added.
        * platform/ios/wak/WKViewPrivate.h: Added.
        * platform/ios/wak/WebCoreThread.h: Added.
        * platform/ios/wak/WebCoreThread.mm: Added.
        * platform/ios/wak/WebCoreThreadInternal.h: Added.
        * platform/ios/wak/WebCoreThreadMessage.h: Added.
        * platform/ios/wak/WebCoreThreadRun.cpp: Added.
        * platform/ios/wak/WebCoreThreadRun.h: Added.
        * platform/ios/wak/WebCoreThreadSafe.h: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.cpp: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.h: Added.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/network/cf/ResourceRequest.h: Always declare ResourceRequest::updateFromDelegatePreservingOldHTTPBody()
        instead of only declaring it when building without CFNetwork.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        For some reason, the Windows build is unhappy that NeverDestroyed<FontCache> calls the private constructor
        FontCache::FontCache() despite being a friend class of FontCache. Use DEFINE_STATIC_LOCAL instead of
        NeverDestroyed<> for now. I'll look to investigate this issue offline.

        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache):
        * platform/graphics/FontCache.h:

2014-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove blackberry from WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/blackberry: Removed.
        * platform/graphics/blackberry: Removed.
        * platform/graphics/filters/blackberry: Removed.
        * platform/image-decoders/blackberry: Removed.
        * platform/mediastream/blackberry: Removed.
        * platform/network/blackberry: Removed.
        * platform/text/blackberry: Removed.

2014-01-09  Alexey Proskuryakov  <ap@apple.com>

        Fix a copy-paste mistake in an include guard.

        Rubber-stamped by Sam Weinig.

        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:

2014-01-09  Anders Carlsson  <andersca@apple.com>

        History::StateObjectType should be a strong enum
        https://bugs.webkit.org/show_bug.cgi?id=126725

        Reviewed by Beth Dakin.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/History.h:

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mountain Lion Release (32-bit) build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:

2014-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/platform changes
        https://bugs.webkit.org/show_bug.cgi?id=126654

        Rubber-stamped by David Kilzer.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ContentFilter.h:
        * platform/DragData.h:
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseMediaFiles):
        * platform/FileChooser.h:
        * platform/FileSystem.cpp:
        (WebCore::setMetadataURL):
        * platform/FileSystem.h:
        * platform/KillRingNone.cpp:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonChooseMediaFileLabel):
        (WebCore::fileButtonChooseMultipleMediaFilesLabel):
        (WebCore::fileButtonNoMediaFileSelectedLabel):
        (WebCore::fileButtonNoMediaFilesSelectedLabel):
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeUnsupportedTextMIMETypes):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        * platform/MemoryPressureHandler.h:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::event):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformScreen.h:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::mainBundleIsEqualTo):
        * platform/RuntimeApplicationChecksIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/RuntimeApplicationChecksIOS.mm: Added.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleTouchEvent):
        * platform/ScrollAnimator.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleTouchEvent):
        (WebCore::ScrollableArea::isPinnedInBothDirections):
        (WebCore::ScrollableArea::isPinnedHorizontallyInDirection):
        (WebCore::ScrollableArea::isPinnedVerticallyInDirection):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isTouchScrollable):
        (WebCore::ScrollableArea::isOverflowScroll):
        (WebCore::ScrollableArea::didStartScroll):
        (WebCore::ScrollableArea::didEndScroll):
        (WebCore::ScrollableArea::didUpdateScroll):
        (WebCore::ScrollableArea::setIsUserScroll):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMaximumPosition):
        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createPurgeableBuffer):
        (WebCore::SharedBuffer::data):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::shouldUsePurgeableMemory):
        * platform/SuddenTermination.h:
        * platform/Supplementable.h:
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        * platform/SystemMemory.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/ThreadCheck.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        (WebCore::ThreadGlobalData::setWebCoreThreadData):
        (WebCore::threadGlobalData):
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        * platform/Timer.cpp:
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::isActive):
        * platform/URL.cpp:
        (WebCore::enableURLSchemeCanonicalization):
        (WebCore::equal):
        (WebCore::URL::parse):
        * platform/URL.h:
        * platform/Widget.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.cpp: Copied from Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp.
        (WebCore::createAudioBufferList):
        (WebCore::destroyAudioBufferList):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::readProc):
        (WebCore::AudioFileReader::getSizeProc):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/ios/AudioFileReaderIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        (WebCore::AudioFileReader::data):
        (WebCore::AudioFileReader::dataSize):
        * platform/audio/ios/AudioSessionIOS.mm:
        (SOFT_LINK_POINTER):
        (-[WebAudioSessionHelper initWithCallback:WebCore::]):
        (-[WebAudioSessionHelper dealloc]):
        (-[WebAudioSessionHelper interruption:]):
        (WebCore::AudioSession::setCategory):
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/cf/URLCF.cpp:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForCharCode):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::cacheFrameInfo):
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::originalSize):
        (WebCore::BitmapImage::originalSizeRespectingOrientation):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::ensureFrameInfoIsCached):
        (WebCore::BitmapImage::frameAtIndex):
        (WebCore::BitmapImage::frameIsCompleteAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::frameOrientationAtIndex):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/Color.cpp:
        (WebCore::Color::isDark):
        * platform/graphics/Color.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        (initFontCacheLockOnce):
        (FontLocker::FontLocker):
        (FontLocker::~FontLocker):
        (WebCore::fontCache):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        * platform/graphics/FontGlyphs.h:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawRaisedEllipse):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::emojiDrawingEnabled):
        (WebCore::GraphicsContext::setEmojiDrawingEnabled):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsLayerForMedia):
        (WebCore::GraphicsLayer::pixelAlignmentOffset):
        (WebCore::GraphicsLayer::hasFlattenedPerspectiveTransform):
        * platform/graphics/Icon.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::isSubsampled):
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayer::showPlaybackTargetPicker):
        (WebCore::MediaPlayer::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayer::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::playbackTargetAvailabilityChanged):
        (WebCore::MediaPlayer::attributeChanged):
        (WebCore::MediaPlayer::readyForPlayback):
        (WebCore::MediaPlayer::volumeChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayerClient::mediaPlayerPlaybackTargetAvailabilityChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::volume):
        (WebCore::MediaPlayerPrivateInterface::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateInterface::showPlaybackTargetPicker):
        (WebCore::MediaPlayerPrivateInterface::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayerPrivateInterface::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayerPrivateInterface::attributeChanged):
        (WebCore::MediaPlayerPrivateInterface::readyForPlayback):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::leftTruncate):
        (WebCore::StringTruncator::rightClipToCharacter):
        (WebCore::StringTruncator::rightClipToWord):
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::wkAVAssetResolvedURL):
        * platform/graphics/blackberry/FontBlackBerry.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::supportsAcceleratedFilterAnimations):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::contentsLayerForMedia):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread):
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::currentRunLoop):
        (WebCore::LayerFlushScheduler::schedule):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (PlatformCALayerMac::setContentsScale):
        (PlatformCALayer::isWebLayer):
        (PlatformCALayer::setBoundsOnMainThread):
        (PlatformCALayer::setPositionOnMainThread):
        (PlatformCALayer::setAnchorPointOnMainThread):
        (PlatformCALayer::setTileSize):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        (WebCore::TileController::removeAllTiles):
        (WebCore::TileController::removeAllSecondaryTiles):
        (WebCore::TileController::removeTilesInCohort):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::createTileLayer):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColorWithDeviceWhite):
        (WebCore::createCGColorWithDeviceRGBA):
        (WebCore::Color::Color):
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::setStrokeAndFillColor):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::draw):
        (WebCore::jpegUTI):
        (WebCore::utiFromMIMEType):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPatternCallback):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::imageSourceOptions):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::originalSize):
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm: Added.
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/ios/FontCacheIOS.mm: Added.
        * platform/graphics/ios/FontServicesIOS.h: Added.
        * platform/graphics/ios/FontServicesIOS.mm: Added.
        (WebCore::FontServicesIOS::FontServicesIOS):
        * platform/graphics/ios/GraphicsContext3DIOS.h: Added.
        * platform/graphics/ios/IconIOS.mm: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.cpp.
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: Copied from Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h.
        (WebCore::InbandTextTrackPrivateAVFIOS::create):
        (WebCore::InbandTextTrackPrivateAVFIOS::internalID):
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm: Copied from Source/WebCore/platform/graphics/mac/IntRectMac.mm.
        (WebCore::InbandTextTrackPrivateAVFIOS::InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::~InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::kind):
        * platform/graphics/ios/MediaPlayerPrivateIOS.h: Added.
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm: Added.
        * platform/graphics/ios/SimpleFontDataIOS.mm: Added.
        (WebCore::fontFamilyShouldNotBeUsedForArabic):
        (WebCore::fontHasVerticalGlyphs):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/ios/TextTrackRepresentationIOS.h: Copied from Source/WebCore/platform/graphics/TextTrackRepresentation.cpp.
        * platform/graphics/ios/TextTrackRepresentationIOS.mm: Added.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatRectMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::fontDataForCombiningCharacterSequence):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setRenderbufferStorageFromDrawable):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::endPaint):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::createDotPattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData):
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntRectMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (+[WebTiledLayer shouldDrawOnMainThread]):
        (-[WebTiledLayer display]):
        (-[WebTiledLayer drawInContext:]):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawComplexText):
        * platform/ios/ContentFilterIOS.mm: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/DeviceMotionClientIOS.h: Added.
        (WebCore::DeviceMotionClientIOS::create):
        * platform/ios/DeviceMotionClientIOS.mm: Added.
        * platform/ios/DeviceOrientationClientIOS.h: Added.
        (WebCore::DeviceOrientationClientIOS::create):
        * platform/ios/DeviceOrientationClientIOS.mm: Added.
        * platform/ios/KeyEventIOS.mm:
        * platform/ios/MIMETypeRegistryIOS.mm: Copied from Source/WebCore/platform/network/mac/CredentialStorageMac.mm.
        * platform/ios/MemoryPressureHandlerIOS.mm: Added.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::resourceMIMEType):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::read):
        (WebCore::supportedImageTypes):
        (WebCore::Pasteboard::supportedPasteboardTypes):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::readString):
        * platform/ios/PlatformEventFactoryIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/PlatformEventFactoryIOS.mm: Added.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):
        * platform/ios/PlatformScreenIOS.mm: Added.
        * platform/ios/PlatformSpeechSynthesizerIOS.mm: Added.
        * platform/ios/SSLKeyGeneratorIOS.cpp: Added.
        * platform/ios/ScrollAnimatorIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/ScrollAnimatorIOS.mm: Added.
        * platform/ios/ScrollViewIOS.mm: Added.
        * platform/ios/ScrollbarThemeIOS.h: Added.
        * platform/ios/ScrollbarThemeIOS.mm: Added.
        * platform/ios/SelectionRect.cpp: Added.
        * platform/ios/SelectionRect.h: Added.
        * platform/ios/SoundIOS.mm: Copied from Source/WebCore/platform/text/mac/CharsetData.h.
        * platform/ios/SystemMemoryIOS.cpp: Added.
        * platform/ios/ThemeIOS.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/ThemeIOS.mm: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/TileCache.h: Added.
        (WebCore::TileCache::isSpeculativeTileCreationEnabled):
        * platform/ios/TileCache.mm: Added.
        * platform/ios/TileGrid.h: Added.
        * platform/ios/TileGrid.mm: Added.
        * platform/ios/TileGridTile.h: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/TileGridTile.mm: Added.
        * platform/ios/TileLayer.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/TileLayer.mm: Added.
        * platform/ios/TileLayerPool.mm: Added.
        * platform/ios/WebCoreMotionManager.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/WebCoreMotionManager.mm: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.mm: Added.
        * platform/ios/WebEvent.h: Added.
        * platform/ios/WebEvent.mm: Added.
        * platform/ios/WidgetIOS.mm: Added.
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        (WebCore::DisplaySleepDisabler::~DisplaySleepDisabler):
        * platform/mac/DisplaySleepDisabler.h:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/KillRingMac.mm:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::PlatformClockCM):
        * platform/mac/SoftLinking.h:
        * platform/mac/SystemVersionMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):
        * platform/network/BlobRegistry.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/Credential.h:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::clearCredentials):
        * platform/network/CredentialStorage.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleConstructorMap):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setDefaultAllowCookies):
        (WebCore::ResourceRequestBase::defaultAllowCookies):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::setMainResourceRequest):
        (WebCore::ResourceRequest::isMainResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/network/ios/NetworkStateNotifierIOS.cpp: Copied from Source/WebCore/platform/KillRingNone.cpp.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::setIsOnLine):
        * platform/network/ios/QuickLook.h: Added.
        * platform/network/ios/QuickLook.mm: Added.
        * platform/network/ios/ResourceHandleIOS.mm: Added.
        * platform/network/ios/WebCoreURLResponseIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/network/ios/WebCoreURLResponseIOS.mm: Added.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/mac/ResourceErrorMac.mm:
        (dictionaryThatCanCode):
        (-[WebCustomNSURLError encodeWithCoder:]):
        (NSErrorFromCFError):
        (WebCore::ResourceError::nsError):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled):
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):
        * platform/network/mac/UTIUtilities.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::truncateDatabaseFile):
        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::stop):
        * platform/sql/ios/SQLiteDatabaseTracker.cpp: Added.
        * platform/sql/ios/SQLiteDatabaseTracker.h: Copied from Source/WebCore/platform/MemoryPressureHandler.cpp.
        * platform/sql/ios/SQLiteDatabaseTrackerClient.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/text/PlatformLocale.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        (WebCore::TextCodecICU::registerCodecs):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::canHyphenate):
        * platform/text/ios/LocalizedDateCache.h: Copied from Source/WebCore/platform/MemoryPressureHandler.h.
        * platform/text/ios/LocalizedDateCache.mm: Added.
        * platform/text/mac/CharsetData.h:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime):
        (WebCore::LocaleMac::maximumWidthForDateType):
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::isSkipCharacter):
        (WebCore::isWhitespaceCharacter):
        (WebCore::isWordDelimitingCharacter):
        (WebCore::isSymbolCharacter):
        (WebCore::isAmbiguousBoundaryCharacter):
        (WebCore::tokenizerForString):
        (WebCore::findSimpleWordBoundary):
        (WebCore::findComplexWordBoundary):
        (WebCore::findWordBoundary):
        (WebCore::findNextWordFromIndex):
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/mac/TextCodecMac.h:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Consolidate developerExtrasEnabled to just InspectorEnvironment
        https://bugs.webkit.org/show_bug.cgi?id=126717

        Reviewed by Timothy Hatcher.

        They all route to InspectorEnvironment::developerExtrasEnabled, so make
        InspectorEnvironment available to all agents through InstrumentingAgents
        and use that where needed.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::create):
        (WebCore::InstrumentingAgents::inspectorEnvironment):
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Unnecessary InspectorAgent parameters
        https://bugs.webkit.org/show_bug.cgi?id=126712

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:

2014-01-09  Antti Koivisto  <antti@apple.com>

        Remove an accidentally left-behind static_cast.

        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Replace ElementIteratorAdapter find() with beginAt()
        https://bugs.webkit.org/show_bug.cgi?id=126714

        Reviewed by Andreas Kling.

        ElementIteratorAdapter find() would return iterator for the argument element if it was
        of correct type and in the right subtree. This is not really what you would expect from find()
        so replace it with a simple beginAt() iterator construction function.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::getAllElementsById):
        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::beginAt):
        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementDescendantConstIteratorAdapter<ElementType>::beginAt):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):

2014-01-09  Brian Burg  <bburg@apple.com>

        REGRESSION (r160152): Selection drag snapshot doesn't appear or has the wrong content on Retina
        https://bugs.webkit.org/show_bug.cgi?id=125375

        Reviewed by Darin Adler.

        Move scaling of drag images by the device scale factor out of DragClient
        and into WebCore. This removes several redundant copies and scaling operations.

        Fix scaling bugs that were cancelled out by over-allocating the backing store.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Scale the drag image for a link
        according to the device scale factor before giving it to the OS.

        (WebCore::DragController::doImageDrag): Scale the drag image for an image
        according to the device scale factor before giving it to the OS.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect): Don't pre-scale or clip the snapshot. The
        ImageBuffer does this already.

        * platform/DragImage.cpp:
        (WebCore::createDragImageFromSnapshot): Don't scale the backing store
        when copying an ImageBuffer into an Image.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage): Draw the image in user-space coordinates,
        not in backing-store coordinates. Remove unnecessary assertions. Crop the
        buffer before drawing the image into it.

2014-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Narrow underlines are too tall
        https://bugs.webkit.org/show_bug.cgi?id=126708

        Reviewed by Simon Fraser.

        I made a typo in r158392 and used was settings the line rect's
        height equal to its width. No one noticed because of the subsequent
        if statement.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-tall-underlines.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText):

2014-01-09  Antti Koivisto  <antti@apple.com>

        DocumentOrderedMap should use iterator
        https://bugs.webkit.org/show_bug.cgi?id=126696

        Reviewed by Andreas Kling.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesId):
        (WebCore::keyMatchesName):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::keyMatchesLowercasedUsemap):
        (WebCore::keyMatchesLabelForAttribute):
        (WebCore::keyMatchesWindowNamedItem):
        (WebCore::keyMatchesDocumentNamedItem):
        
            Switch to Element references.

        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getAllElementsById):
        
             Use element iterator instead of ElementTraversal.

        * dom/DocumentOrderedMap.h:

2014-01-09  Beth Dakin  <bdakin@apple.com>

        Margin tiles are not repainted when background color changes
        https://bugs.webkit.org/show_bug.cgi?id=126541
        -and corresponding-
        <rdar://problem/15578131>

        Reviewed by Simon Fraser.

        This patch adds an optional parameter to GraphicsLayer::setNeedsDisplayInRect, 
        RenderLayerBacking::setContentsNeedDisplay(), and 
        RenderLayer::setBackingNeedsRepaint() that is used to determine whether or not to 
        clip the invalidation rect to the size of the layer. Then whenever the margin 
        needs to be repainted, we can call setNeedsDisplayInRect() with a rect that 
        includes the margin, and also indicate that it should not be clipped.

        GraphicsLayer now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

        Make TileController::bounds() a virtual function, and declare it on TiledBacking 
        so that we can call it from RenderLayerBacking.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:

        RenderLayer also now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

        If the margin needs to be repainted, call GraphicsLayer::setNeedsDisplayInRect 
        with a big enough rect and a ShouldClipToLayer value of DoNotClipToLayer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        * rendering/RenderLayerBacking.h:

        Whenever all of the root contents need to be repainted the margin will also need 
        to be repainted, so call setBackingNeedsRepaint() with the new parameter 
        indicating the the invalidation should NOT be clipped to the layer size.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintRootContents):

2014-01-09  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Factor the ReferenceBox type out of BasicShapes
        https://bugs.webkit.org/show_bug.cgi?id=126648

        Reviewed by Dirk Schulze.

        Moving ReferenceBox out of BasicShapes and into RenderStyleConstants
        as the LayoutBox enum. Most of the changes are removing the BasicShape
        namespace.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeRectangle::cssText):
        (WebCore::CSSBasicShapeRectangle::equals):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSDeprecatedBasicShapeCircle::cssText):
        (WebCore::CSSDeprecatedBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        (WebCore::CSSBasicShapeInset::cssText):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::layoutBox):
        (WebCore::CSSBasicShape::setLayoutBox):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::ShapeClipPathOperation::ShapeClipPathOperation):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createLayoutBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::layoutBox):
        (WebCore::BasicShape::setLayoutBox):
        (WebCore::BasicShape::BasicShape):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createLayoutBoxValue):
        (WebCore::ShapeValue::layoutBox):
        (WebCore::ShapeValue::ShapeValue):

2014-01-09  Tim Horton  <timothy_horton@apple.com>

        PDFDocumentImage can be very slow to do the initial paint
        https://bugs.webkit.org/show_bug.cgi?id=126633
        <rdar://problem/15770980>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::size):
        (WebCore::transformContextForPainting):
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        (WebCore::applyRotationForPainting):
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Store rotation from the PDF in degrees, since it can
        only be 0, 90, 180, or 270, and don't do any trig to
        perform the rotation, to avoid introducing minor rounding
        issues in the size.

        Once we're going to paint, if the difference between the
        computed scale for each axis is due only to integer rounding
        of the image size, use the same scale for both axes, to avoid
        a CG slow-path which occurs whenever the scale is nonuniform.

2014-01-09  Antti Koivisto  <antti@apple.com>

        Disconnect child frames iteratively
        https://bugs.webkit.org/show_bug.cgi?id=126700

        Reviewed by Andreas Kling.

        Use descendant iterator instead of recursion for traversal.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::disconnectDescendantFrames):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::assertConnectedSubrameCountIsConsistent):
        (WebCore::collectFrameOwners):
        (WebCore::disconnectSubframes):
        
            Get rid of the strange ChildFrameDisconnector class in favor of a function.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::disconnectSubframesIfNeeded):

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove reference to removed file.

        * bindings/js/JSBindingsAllInOne.cpp:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InjectedScript classes into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=126598

        Part 6: Put it all together. Make WebCore use the JavaScriptCore InjectedScript files.

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove old InjectedScript files.

        * ForwardingHeaders/inspector/InjectedScript.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptBase.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptHost.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptManager.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptModule.h: Added.
        * ForwardingHeaders/inspector/InspectorEnvironment.h: Added.
        Expose headers to WebCore.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::developerExtrasEnabled):
        (WebCore::InspectorController::canAccessInspectedScriptState):
        (WebCore::InspectorController::functionCallHandler):
        (WebCore::InspectorController::evaluateHandler):
        (WebCore::InspectorController::willCallInjectedScriptFunction):
        (WebCore::InspectorController::didCallInjectedScriptFunction):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::functionCallHandler):
        (WebCore::WorkerInspectorController::evaluateHandler):
        (WebCore::WorkerInspectorController::willCallInjectedScriptFunction):
        (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
        Make both InspectorControllers in WebCore be InspectorEnvironments.

        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::evaluateHandlerFromAnyThread):
        Make JSC::evaluate wrapper like the existing JSC::call wrapper.
        These will be the ScriptFunctionCall implementations when debugging
        a WebCore::Page or worker, instead of the pure JSC versions.

        * inspector/PageInjectedScriptHost.h: Copied from Source/WebCore/inspector/CommandLineAPIModule.h.
        * inspector/PageInjectedScriptHost.cpp: Copied from Source/WebCore/inspector/PageInjectedScriptManager.cpp.
        (WebCore::PageInjectedScriptHost::type):
        (WebCore::PageInjectedScriptHost::isHTMLAllCollection):
        WebCore InjectedScriptHost implementation for DOM type handling.

        * inspector/PageInjectedScriptManager.h:
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::discardInjectedScriptsFor):
        WebCore InjectedScriptManager implementation for CommandLineAPI and
        specialized DOMWindow injected script management.

        * bindings/js/JSBindingsAllInOne.cpp:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::injectedScriptManager):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::injectedScriptManager):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        Switch to using the Inspector namespace and JSC InjectedScript files.

        * bindings/js/JSInjectedScriptManager.cpp: Removed.
        * inspector/InjectedScript.h: Removed.
        * inspector/InjectedScriptHost.cpp: Removed.
        * inspector/InjectedScriptHost.h: Removed.
        * inspector/InjectedScriptHost.idl: Removed.


        Part 4: Move all inspector scripts into JavaScriptCore and update generators.

        With the updated location switch to using the appropriate INSPECTOR_SCRIPTS_DIR
        variable which defines where the scripts are.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:


        Part 1: Extract InspectorInstrumentationCookie class from InspectorInstrumentation.

        Currently InjectedScriptBase uses InspectorInstrumentation directly
        to track calling into JavaScript for timeline purposes. We will remove
        the direct call from InjectedScriptBase and extracting the Cookie class
        will make that easier.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentationCookie.cpp: Added.
        (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentationCookie::operator=):
        (WebCore::InspectorInstrumentationCookie::~InspectorInstrumentationCookie):
        * inspector/InspectorInstrumentationCookie.h: Added.
        (WebCore::InspectorInstrumentationCookie::isValid):
        (WebCore::InspectorInstrumentationCookie::instrumentingAgents):
        (WebCore::InspectorInstrumentationCookie::hasMatchingTimelineAgentId):

2014-01-09  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Cannot select multiple non-adjacent items in a multiple select control with the keyboard only
        https://bugs.webkit.org/show_bug.cgi?id=15816

        Reviewed by Chris Fleizach.

        Test: fast/forms/listbox-non-contiguous-keyboard-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        New member m_allowsNonContiguousSelection defaults to false
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Tracking CTRL modifier to start multiple non contiguous selection
        * html/HTMLSelectElement.h: New member m_allowsNonContiguousSelection
        (WebCore::HTMLSelectElement::allowsNonContiguousSelection): New getter
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        Following implementation made for spatial navigation

2014-01-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused overriding protocols.
        https://bugs.webkit.org/show_bug.cgi?id=126630

        Reviewed by Timothy Hatcher.

        No new tests, No change in behavior.

        Remove unused overriding protocols as these are not used anymore in Frontned.
        -Page.setGeolocationOverride
        -Page.clearGeolocationOverride
        -Page.canOverrideGeolocation
        -Page.setDeviceOrientationOverride
        -Page.clearDeviceOrientationOverride
        -Page.canOverrideGeolocation
        -Network.setUserAgentOverride

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::create):
        (WebCore::GeolocationController::positionChanged):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::create):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::provideDeviceOrientationTo):
        * dom/DeviceOrientationController.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorResourceAgent.h:
        * inspector/protocol/Network.json:
        * inspector/protocol/Page.json:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):

2014-01-09  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move regions auto-size code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122959

        Reviewed by Mihnea Ovidenie.

        Move the auto-height logic from RenderRegion to RenderNamedFlowFragment because it's
        used only by the CSS Regions implementation.

        Bug 126642 covers the auto-height logic move from RenderFlowThread to RenderNamedFlowThread.

        Tests: No new tests, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::incrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::decrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::updateRegionHasAutoLogicalHeightFlag):
        (WebCore::RenderNamedFlowFragment::updateLogicalHeight):
        (WebCore::RenderNamedFlowFragment::pageLogicalHeight):
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::attachRegion):
        (WebCore::RenderNamedFlowFragment::detachRegion):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):
        (WebCore::RenderRegion::isLastRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::detachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Switch HTMLTableRowsCollection from Traversal<> to iterators
        https://bugs.webkit.org/show_bug.cgi?id=126684

        Reviewed by Andreas Kling.

        This is the last remaining client of Traversal<> outside the iterator implementation.

        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::find):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::find):
        
            Add find with the same semantics as ElementDescendantIterator::find.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):

2014-01-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161176): http/tests/misc/authentication-redirect-3/authentication-sent-to-redirect-same-origin-with-location-credentials.html is failing on GTK
        https://bugs.webkit.org/show_bug.cgi?id=126518

        Reviewed by Martin Robinson.

        Clear the credentials before calling willSendRequest on the client
        to avoid sending the credentials to the API layer, but apply them
        again to the request right before creating the new SoupRequest.

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

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161532.
        http://trac.webkit.org/changeset/161532
        https://bugs.webkit.org/show_bug.cgi?id=126677

        Caused lots of assertion failures (Requested by ap on
        #webkit).

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::didTimeout):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd):
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::fired):
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchEventAndLoadEnd):
        * xml/XMLHttpRequestUpload.h:

2014-01-08  Brian Burg  <bburg@apple.com>

        Clean up confusing names and calculations in image-dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=126661

        Reviewed by Timothy Hatcher.

        No new tests.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag): rename variables and
        simplify the calculation of the image's scaled origin.

        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize): rename variables.

2014-01-08  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove InspectorClient::captureScreenshot()
        https://bugs.webkit.org/show_bug.cgi?id=126616

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover mothod as Page.captureScreenshot API was removed in r160202.

        * inspector/InspectorClient.h:

2014-01-08  Youenn Fablet  <youennf@gmail.com>

        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

2014-01-08  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * page/FrameView.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        Push the FrameView's cached exposed rect down into the TiledBacking when it is created.
        We only support clipping for the main frame TileController for now.

2014-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        a fractional value of the css letter-spacing property is not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=20606

        Reviewed by Simon Fraser.

        This turns on fractional letter-spacing and word-spacing CSS values.
        It is taken mostly from Blink r153727 and iOS. Updating the relevant
        types is all that is necessary

        Existing tests have been updated.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::Font::wordSpacing):
        (WebCore::Font::letterSpacing):
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::letterSpacing):
        (WebCore::RenderStyle::setWordSpacing):
        (WebCore::RenderStyle::setLetterSpacing):
        * rendering/style/RenderStyle.h:

2014-01-08  Anders Carlsson  <andersca@apple.com>

        Add WTF::StringView and use it for grammar checking
        https://bugs.webkit.org/show_bug.cgi?id=126644

        Reviewed by Antti Koivisto.

        Use a StringView in TextCheckerClient::checkTextOfParagraph to avoid upconverting strings unnecessarily.

        * editing/TextCheckingHelper.cpp:
        (WebCore::checkTextOfParagraph):
        Pass a StringView to TextCheckerClient::checkTextOfParagraph.
        
        * loader/EmptyClients.h:
        Update for TextCheckerClient changes.

        * platform/text/TextCheckerClient.h:
        Change TextCheckerClient::checkTextOfParagraph to take a StringView.
        
2014-01-08  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed Windows build fix attempt after r161481.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2014-01-08  Andreas Kling  <akling@apple.com>

        Deploy RenderPtr in RenderMathMLOperator::updateFromElement().
        <https://webkit.org/b/126628>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

            Use RenderPtr/createRenderer for renderer creation.
            Removed an unnecessary null check (text is always created.)
            Also use RenderStyle::createAnonymousStyleWithDisplay()
            helper to shorten down the code a bit.

2014-01-08  Alberto Garcia  <berto@igalia.com>

        Fix some compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=126635

        Reviewed by Csaba Osztrogonác.

        Remove code that is no longer being used.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RedirectedXCompositeWindow.h:

2014-01-08  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] Scripts for generated build targets do not necessarily produce their output
        https://bugs.webkit.org/show_bug.cgi?id=126378

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Touch the build targets that are generated through helper scripts that don't
        assure the output is generated every time the script is invoked, most commonly due to unchanged
        * bindings/gobject/GNUmakefile.am: Simply move the gdom-gen-symbols file into the output file
        instead of copying it if the contents differ and removing it. This again ensures that the output
        file is always newer than its dependencies, even if the input hasn't changed.

2014-01-08  Frédéric Wang  <fred.wang@free.fr>

        Remove invalid comments from mathtags.ing
        https://bugs.webkit.org/show_bug.cgi?id=126629

        Reviewed by Chris Fleizach.

        * mathml/mathtags.in:

2014-01-08  Andreas Kling  <akling@apple.com>

        RenderMathMLRow::createAnonymousWithParentRenderer() should return RenderPtr.
        <https://webkit.org/b/126631>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):

            Tweak to return RenderPtr<RenderMathMLRow> and removed comment(!)
            about how this should return a smart pointer. Also take the
            parent renderer as a RenderMathMLRoot& instead of a RenderObject*
            since that's all we ever pass.

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):

            Updated for new createAnonymousWithParentRenderer() signature.

2014-01-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: Make roleValue() return DescriptionListRole for <dl> elements
        https://bugs.webkit.org/show_bug.cgi?id=126579

        Reviewed by Chris Fleizach.

        Implement AccessibilityList::roleValue() so it will return
        ListRole or DescriptionListRole depending on the type of list.

        No new tests needed, as no new functionality was added and ports
        should still be exposing the right role for <dl> elements

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::roleValue): Implemented.
        * accessibility/AccessibilityList.h:

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Removed extra checks for objects with ListRole role.

2014-01-08  Andreas Kling  <akling@apple.com>

        createMathMLOperator() should return RenderPtr.
        <https://webkit.org/b/126622>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):

            Make this return a RenderPtr<RenderMathMLOperator>.

        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):

            Updated for the new createMathMLOperator() signature.

2014-01-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r161195): Acid2 regression tests frequently fail
        https://bugs.webkit.org/show_bug.cgi?id=126432

        Reviewed by Anders Carlsson.
        
        We would occasionally dump the render tree before the actual last resource on the page was loaded.
        The problematic resource is an image loaded by an <object> tag nested as fallback of another <object>.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        
            Force style recalc when rendering fallback content. The current mechanism for triggering the fallback content load
            requires a style recalc.

2014-01-07  Andreas Kling  <akling@apple.com>

        createAnonymousMathMLBlock() should return RenderPtr.
        <https://webkit.org/b/126583>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):

            Make this return a RenderPtr<RenderMathMLBlock> and removed the
            EDisplay argument since it was always using the default (FLEX.)

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):

            Updated for the new createAnonymousMathMLBlock() signature.

2014-01-07  Eric Carlson  <eric.carlson@apple.com>

        Teach MediaSessionManager to manage interruptions
        https://bugs.webkit.org/show_bug.cgi?id=126530

        Reviewed by Sam Weinig.

        Tests: media/video-interruption-active-when-element-created.html
               media/video-interruption-with-resume-allowing-play.html
               media/video-interruption-with-resume-not-allowing-play.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add MediaSession and MediaSessionManager.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Automatically pause/play for interruptions. Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Get rid of m_loadInitiatedByUserGesture and m_userStartedPlayback,
            they aren't needed.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::play): Remove redundant iOS code. Postpone playback if called 
            during an interruption.
        (WebCore::HTMLMediaElement::pause): Remember to not resume playback when it ends if called during
            an interruption.
        (WebCore::HTMLMediaElement::potentiallyPlaying): Rearrange code to make it easier to understand.
        (WebCore::HTMLMediaElement::couldPlayIfEnoughData): Ditto.
        (WebCore::HTMLMediaElement::pausedForUserInteraction): Return true if paused because of an interruption.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Be explicit about
            which restrictions are removed.
        (WebCore::HTMLMediaElement::mediaType): MediaSessionManager::<Type> -> MediaSession::<Type>.
        (WebCore::HTMLMediaElement::beginInterruption): New.
        (WebCore::HTMLMediaElement::endInterruption): Ditto.
        * html/HTMLMediaElement.h:

        Pulled MediaSessionManagerToken out of MediaSessionManager.cpp, added functionality to manage interruptions.
        * platform/audio/MediaSession.cpp: Added.
        (WebCore::MediaSession::create):
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::~MediaSession):
        (WebCore::MediaSession::beginInterruption): Inform client of interruption state change.
        (WebCore::MediaSession::endInterruption): Ditto.
        * platform/audio/MediaSession.h: Added.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize interruption counter.
        (WebCore::MediaSessionManager::has): MediaType is defined in MediaSession.
        (WebCore::MediaSessionManager::count): Ditto.
        (WebCore::MediaSessionManager::beginInterruption): Inform all clients of interruption start if
            not already in an interruption.
        (WebCore::MediaSessionManager::endInterruption): Inform all clients if interruption has ended.
        (WebCore::MediaSessionManager::addSession): Renamed from addToken. Set session interruption state.
        (WebCore::MediaSessionManager::removeSession): Renamed from removeToken.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken -> MediaSession.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Ditto.

        Make it possible for tests to begin and end interruptions.
        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption):
        (WebCore::Internals::endMediaSessionInterruption):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-07  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover 'device metrics' code
        https://bugs.webkit.org/show_bug.cgi?id=126607

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        Removes unused code related to 'device metrics'.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        * inspector/InspectorClient.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::didLayout):
        * inspector/InspectorPageAgent.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        * page/Screen.cpp:
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

2014-01-02  Andy Estes  <aestes@apple.com>

        [iOS] Upstream remainder of minimal-ui viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=126410

        Reviewed by Sam Weinig.

        * dom/ViewportArguments.h:

2014-01-07  Victor Costan  <costan@gmail.com>

        createElementNS handles element name 'xmlns' correctly.
        https://bugs.webkit.org/show_bug.cgi?id=126553

        Reviewed by Alexey Proskuryakov.

        Tests: fast/dom/createElementNS-namespace-errors.html
               fast/dom/setAttributeNS-namespace-errors.html

        * dom/Document.cpp:
        (WebCore::Document::hasValidNamespaceForElements): updated to match DOM3/DOM4 spec.
        (WebCore::Document::hasValidNamespaceForAttributes): updated to match DOM3/DOM4 spec.

2014-01-07  Jer Noble  <jer.noble@apple.com>

        PlatformLayer containing scrollbars does not disappear when setting overflow:hidden on page root, until resize.
        https://bugs.webkit.org/show_bug.cgi?id=116051

        Reviewed by Simon Fraser.

        Move the pre-existing call to addedOrRemovedScrollbar() outside of the else-statement
        in updateScrollbars() so that changes made in the if-statement cause the scrollbar
        layers to be updated. The scrollbarAddedOrRemoved local variable guarding access to
        addedOrRemovedScrollbar() is already being set (but never checked) inside the if-statement.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-06  Jer Noble  <jer.noble@apple.com>

        HTML5 video tag Does Not Load in Apache htaccess/htpasswd Protected Directory
        https://bugs.webkit.org/show_bug.cgi?id=40382

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-auth.html

        Adopt a new AVFoundation API to handle authentication challenge generated while loading
        media through an AVAsset. The authentication request comes through as a
        NSURLAuthenticationChallenge, and is wrapped in a WebCore::AuthenticationChallenge
        by MediaPlayerPrivateAVFoundationObjC, and is sent up to the HTMLMediaElement to handle.
        The HTMLMediaElement creates a ResourceRequest, and passes the challenge up to the
        ResourceLoadNotifier.

        To allow the HTMLMediaElement to initiate handling an AuthenticationChallenge without
        actually creating a ResourceLoader, allow ResourceLoaderDelegate to accept a unique
        identifier and a DocumentLoader in lieu of a ResourceLoader.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        * loader/ResourceLoadNotifier.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):

2014-01-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161447.
        http://trac.webkit.org/changeset/161447
        https://bugs.webkit.org/show_bug.cgi?id=126592

        needs some more work (Requested by thorton on #webkit).

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::setExposedRect):
        (WebCore::TileController::setClipsToExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * rendering/RenderLayerBacking.h:

2014-01-07  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Anders Carlsson.

        Move exposedRect to FrameView so it can be pushed in from WebKit before we have
        a TiledBacking, and can be retrieved by the TiledBacking when it needs to.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        * page/FrameView.h:
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::exposedRect):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        Plumbing so that TileController can retrieve the exposedRect from FrameView.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::platformCALayerExposedRect):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::exposedRectDidChange):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Don't store the exposed rect or clipsToExposedRect on TileController.
        Instead, retrieve it from our client.
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        (WebCore::RenderLayerBacking::exposedRect):
        Hand the FrameView's exposedRect back to our GraphicsLayer.
        We only support clipping for the main frame TileController for now.

        * rendering/RenderLayerBacking.h:

2014-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161381): [GTK] Rendering is broken in GTK after r161381
        https://bugs.webkit.org/show_bug.cgi?id=126570

        Reviewed by Tim Horton.

        Use LayoutRect::infiniteRect() instead of IntRect::infiniteRect()
        when a LayoutRect is expected.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2014-01-07  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Change default value from 'auto' to 'none'
        https://bugs.webkit.org/show_bug.cgi?id=126544

        Reviewed by Sam Weinig.

        Update the CSS infrastructure to accept 'none' as the default value
        for shape-inside and shape-outside.

        Updated existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * rendering/style/ShapeValue.h:

2014-01-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside layout incorrect when line spans rounded box rounded corners
        https://bugs.webkit.org/show_bug.cgi?id=126528

        Reviewed by Andreas Kling.

        BoxShape::getExcludedIntervals() now checks for the special case where the line spans the
        top and bottom rounded corners - which implies that the excluded interval is the box's
        horizontal extent.

        Test: fast/shapes/shape-outside-floats/shape-outside-line-spans-box-corners.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals):

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        Debug biuld fix.

        Replace actionTag with mactionTag in assertions.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):

2014-01-07  Frédéric Wang  <fred.wang@free.fr>

        Add Support for the semantics element.
        https://bugs.webkit.org/show_bug.cgi?id=100626

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/semantics-2.html
               mathml/presentation/semantics-3.html
               mathml/presentation/semantics-4.html

        This provides a complete support for the semantics element. When the first child is a content MathML, an annotation can be selected and displayed. The selection algorithm is identical to Gecko's one. The recognized annotations are text (e.g. LaTeX), presentation MathML, SVG and HTML.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::childShouldCreateRenderer):
        (WebCore::MathMLElement::attributeChanged):
        (WebCore::MathMLElement::isPresentationMathML):
        * mathml/MathMLElement.h:
        (WebCore::MathMLElement::isMathMLToken):
        (WebCore::MathMLElement::isSemanticAnnotation):
        (WebCore::MathMLElement::isPresentationMathML):
        (WebCore::MathMLElement::updateSelectedChild):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * mathml/mathattrs.in:
        * mathml/mathtags.in:

2014-01-07  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Fix compilation issue with GLES2 after http://webkit.org/b/126548
        https://bugs.webkit.org/show_bug.cgi?id=126578

        Reviewed by  Brent Fulgham

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: added GLES2/gl2.h include

2014-01-07  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove some extra includes from XML.
        https://bugs.webkit.org/show_bug.cgi?id=126572

        Reviewed by Anders Carlsson.

        No new tests, no functionality changed.

        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequestUpload.cpp:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.cpp:
        * xml/XPathExpression.cpp:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathFunctions.cpp:
        * xml/XPathNodeSet.cpp:
        * xml/XPathParser.cpp:
        * xml/XPathPath.cpp:
        * xml/XPathPredicate.cpp:
        * xml/XPathPredicate.h:
        * xml/XPathResult.cpp:
        * xml/XPathValue.cpp:
        * xml/XPathVariableReference.cpp:
        * xml/XSLImportRule.cpp:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2014-01-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Andreas Kling.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

2014-01-07  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove some extra includes from SVG.
        https://bugs.webkit.org/show_bug.cgi?id=126565

        Reviewed by Dirk Schulze.

        No new tests, no functionality changed.

        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGResource.cpp:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResourcesCache.cpp:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngine.h:
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextRunRenderingContext.cpp:

2014-01-07  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-checked mixed state as ATK_STATE_INDETERMINATE
        https://bugs.webkit.org/show_bug.cgi?id=125855

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-checked-mixed-value.html

        Expose ATK_STATE_INDETERMINATE to support aria-checked mixed state
        for radio and checkbox types.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2014-01-07  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126562> DOMProgressEvent has unspecified availability

        Reviewed by Ryosuke Niwa.

        * bindings/objc/PublicDOMInterfaces.h: Add DOMProgressEvent. It first appeared in 10.6.

2014-01-07  Mark Rowe  <mrowe@apple.com>

        Another Mountain Lion build fix.

        The Mountain Lion version of NS_DEPRECATED_MAC generates a reference to a nonexistent
        availability macro when the introduced and deprecated versions are the same. Follow
        AppKit's lead in working around this by defining the macros that will be referenced
        for the various possible OS version numbers. This isn't an issue on newer versions of
        OS X as the Foundation availability macros expand directly in to __attributes__ rather
        than in to the legacy availability maros.

        * bindings/objc/WebKitAvailability.h:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        Mountain Lion build fix.

        * bindings/objc/WebKitAvailability.h: #define __AVAILABILITY_INTERNAL__MAC_TBD so that
        the TBD version works on Mountain Lion. Newer OS versions use a slightly different set
        of macros that already support this version. Add a missing #include so that defintions
        of the Foundation availability macros can be found even if no other Foundation headers
        were included first.

2014-01-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r161401.
        http://trac.webkit.org/changeset/161401
        https://bugs.webkit.org/show_bug.cgi?id=126418

        REGRESSION(r161401): Break layout test on mac-wk1(Debug)

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:

2014-01-05  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126500> Move Objective-C DOM bindings off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        The OS X version used in the new availability macros is based on the mapping in
        JavaScriptCore/WebKitAvailability.h.

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

        Reviewed by Sam Weinig.

        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMEventException.h:
        * bindings/objc/DOMException.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMRangeException.h:
        * bindings/objc/DOMXPathException.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/objc/WebScriptObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GenerateHeader): Tag enums with WK_ENUM_AVAILABLE_MAC and classes with WEBKIT_CLASS_AVAILABLE_MAC.
        Remove the #ifs that we were previously generating now that enums are appropriately tagged.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMattributeInternal.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:
        * bindings/scripts/test/ObjC/DOMreadonlyInternal.h:

2014-01-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r157851): trailing space inside an editable region could be erroneously collapsed
        https://bugs.webkit.org/show_bug.cgi?id=126549

        Reviewed by Sam Weinig.

        The regression was caused by erroneous use of m_currentCharacterIsSpace in place of m_currentCharacterIsWS.

        See the following two lines before the refactoring:
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3074
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3198

        I've also cross-checked other places where m_currentCharacterIsSpace and m_currentCharacterIsWS are used.

        Test: editing/inserting/inserting-trailing-space-and-letter.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove canOverrideDeviceMetrics and setDeviceMetricsOverride from protocol
        https://bugs.webkit.org/show_bug.cgi?id=126149

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        These are not used anywhere in WebInspectorUI.
        So, it removes unused Protocols and APIs.

        * inspector/InspectorClient.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2014-01-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Anders Carlsson.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126559> Be more correct in dealing with NSControlSize

        Reviewed by Ryosuke Niwa.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarControlSizeToNSControlSize): Helper function to map from ScrollbarControlSize
        to NSControlSize.
        (WebCore::ScrollbarThemeMac::registerScrollbar): Use the helper rather than casting.
        (WebCore::ScrollbarThemeMac::scrollbarThickness): Use the helper.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::progressBarRectForBounds): Update the type of the local to NSControlSize.
        (WebCore::RenderThemeMac::paintProgressBar): Ditto.

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Be safer about toggling OpenGL state by using a scoped object to control setting lifetime.
        https://bugs.webkit.org/show_bug.cgi?id=126548

        Reviewed by Anders Carlsson.

        No new tests since there is no change in behavior.

        * GNUmakefile.list.am: Updated to build new TemporaryOpenGLSetting files.
        * PlatformBlackBerry.cmake: Ditto
        * PlatformEfl.cmake: Ditto
        * PlatformGTK.cmake: Ditto
        * PlatformNix.cmake: Ditto
        * WebCore.vcxproj/WebCore.vcxproj: Ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Use new object.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Ditto
        (WebCore::GraphicsContext3D::reshape): Ditto
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: Added.
        (WebCore::TemporaryOpenGLSetting::TemporaryOpenGLSetting):
        (WebCore::TemporaryOpenGLSetting::~TemporaryOpenGLSetting):
        * platform/graphics/opengl/TemporaryOpenGLSetting.h: Added.

2014-01-06  Simon Fraser  <simon.fraser@apple.com>

        Hook up the RemoteScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126547

        Reviewed by Tim Horton.

        Export lots of scrolling-related symbols for use by WebKit2.

        * WebCore.exp.in:

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove support for FileSystem in Frontend.
        https://bugs.webkit.org/show_bug.cgi?id=126369

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover codes from protocol after r156692.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/protocol/FileSystem.json: Removed.

2014-01-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] ASSERTION FAILED: m_segmentRanges.size() < m_segments.size()
        https://bugs.webkit.org/show_bug.cgi?id=125770

        Reviewed by Bem Jones-Bey.

        When we have an e.g. up-side-down triangle, when the content doesn't fit in the bottom part of the shape,
        and the adjusted content flows into the next region with a shape, we need to update the actual shape
        and region. Since it wasn't updated, it led to a shape mismatch, which led to assert/layout error.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-bottom-adjustment.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebiCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread): Update current shape
        and region, when adjustment occured.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of Inspector/BindingVisitors.h
        https://bugs.webkit.org/show_bug.cgi?id=126374

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        In r161204, methods related to BindingVisitors was removed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.h:
        * inspector/BindingVisitors.h: Removed.
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorMemoryAgent.cpp:

2014-01-06  Tim Horton  <timothy_horton@apple.com>

        Add {IntRect, FloatRect}::infiniteRect() and ::isInfinite()
        https://bugs.webkit.org/show_bug.cgi?id=126537

        Reviewed by Simon Fraser.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::infiniteRect):
        (WebCore::FloatRect::isInfinite):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):
        (WebCore::IntRect::isInfinite):
        Add infiniteRect() and isInfinite() to FloatRect and IntRect.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):
        Adopt the new functions.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of DOM.setFileInputFiles from Protocol
        https://bugs.webkit.org/show_bug.cgi?id=126312

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        It is a dead code as all ports in WebKit don't support it.
        And this patch removes all things related to DOM.setFileInputFiles in Frontend.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/protocol/DOM.json:

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Revise String Concatenation (Follow-up to r161247)
        https://bugs.webkit.org/show_bug.cgi?id=126411

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Use more efficient string
        concatenation per Darin Adler's suggestion.

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] FBO Depth Buffer Attachment Function Improperly Clearing with 0
        https://bugs.webkit.org/show_bug.cgi?id=126538
        <rdar://problem/15201336>

        Reviewed by Dean Jackson.

        Tested by webgl/1.0.2/resources/webgl_test_files/conformance/renderbuffers/framebuffer-object-attachment.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeAttachments): Clear depth buffer with 1.0f (rather than 0), to match expected
        default (clear) buffer state for OpenGL. Using 0 would require us to flip the clear mask for the depth attachment
        type.

2014-01-06  Simon Fraser  <simon.fraser@apple.com>

        Add new files for UI-side scrolling
        https://bugs.webkit.org/show_bug.cgi?id=126532

        Reviewed by Anders Carlson.

        * WebCore.xcodeproj/project.pbxproj: Make lots of scrolling-related headers Private
        so WebKit2 can include them.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scheduleUpdateScrollPositionForNode): Callback that
        indicates that the given node has been scrolled asynchronously. Currently only
        handles the main frame.
        * page/scrolling/ScrollingCoordinator.h: Add support for type-casts of a remote subclass
        in another namespace.
        (WebCore::ScrollingCoordinator::isRemoteScrollingCoordinator):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isRemoteScrollingTree):

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Move ViewState to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126488

        Reviewed by Anders Carlson.

        This change also partial reverts handling of LayerHostingMode, making this
        a separate message again. With hindsight the new way of doing this wasn't
        in all ways simpler, and it won't make sense to move this to WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ViewState.h: Added.
            - Moved from WebKit2, will be used by Page & FocusController.

2014-01-06  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Fix the build for the WebKitGTK+ developer configuration
        https://bugs.webkit.org/show_bug.cgi?id=126505

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Add missing IDLS and source files to the lists.
        * PlatformGTK.cmake: Add missing include directories and source files to the lists.
        Use the GeoClue, GUdev, and gio-unix include paths and libraries and sort the list
        of WebCore include directories.
        * UseJSC.cmake: Align the sourced list with the contents of the bindings/js directory.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed speculative Windows build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
            - Added UserActivity.cpp/.h.

2014-01-06  peavo@outlook.com  <peavo@outlook.com>

        [Win] Link error.
        https://bugs.webkit.org/show_bug.cgi?id=126526

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj: Include UserActivity files in build.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding screenRect implementation to PlatformScreenNix
        https://bugs.webkit.org/show_bug.cgi?id=126231

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/PlatformScreenNix.cpp:
        (WebCore::screenRect):

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding missing platform #ifs to WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=126227

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/LocalizedStrings.h:

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding new strings to LocalizedStringsNix
        https://bugs.webkit.org/show_bug.cgi?id=126228

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/LocalizedStringsNix.cpp:
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultDetailsSummaryText):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonChooseMultipleFilesLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::fileButtonNoFilesSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagDownloadVideoToDisk):
        (WebCore::contextMenuItemTagDownloadAudioToDisk):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagShowMediaControls):
        (WebCore::contextMenuitemTagHideMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagUnicode):
        (WebCore::contextMenuItemTagInputMethods):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListText):
        (WebCore::AXDescriptionListTermText):
        (WebCore::AXDescriptionListDetailText):
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore::AXSearchFieldCancelButtonText):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::unknownFileSizeText):
        (WebCore::imageTitle):
        (WebCore::AXListItemActionVerb):
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):
        (WebCore::missingPluginText):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::multipleFileUploadText):
        (WebCore::crashedPluginText):
        (WebCore::blockedPluginByContentSecurityPolicyText):
        (WebCore::insecurePluginVersionText):
        (WebCore::inactivePluginText):
        (WebCore::unacceptableTLSCertificate):
        (WebCore::textTrackClosedCaptionsText):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffMenuItemText):
        (WebCore::textTrackAutomaticMenuItemText):
        (WebCore::textTrackNoLabelText):
        (WebCore::snapshottedPlugInLabelTitle):
        (WebCore::snapshottedPlugInLabelSubtitle):

2014-01-06  László Langó  <lango@inf.u-szeged.hu>

        Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
        https://bugs.webkit.org/show_bug.cgi?id=124579

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::ResourceBuffer):
        * loader/ResourceBuffer.h:
        (WebCore::ResourceBuffer::create):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didReceiveData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/blackberry/BlobStream.cpp:
        (WebCore::BlobStream::didReceiveData):
        * platform/network/blackberry/BlobStream.h:
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willStopBufferingData:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):

2014-01-06  Andreas Kling  <akling@apple.com>

        RenderBlock::clone() should return RenderPtr.
        <https://webkit.org/b/126513>

        Reviewed by Antti Koivisto.

        * rendering/RenderBlock.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

            Tweaked to return RenderPtr<RenderBlock>.

        (WebCore::RenderBlock::splitBlocks):

            Store cloned RenderBlocks in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

        * rendering/RenderPtr.h:

            Add a simple static_pointer_cast for RenderPtr&&.

2014-01-06  Andreas Kling  <akling@apple.com>

        RenderInline::clone() should return RenderPtr.
        <https://webkit.org/b/126514>

        Reviewed by Antti Koivisto.

        * rendering/RenderInline.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clone):

            Tweaked to return RenderPtr<RenderInline>.

        (WebCore::RenderInline::splitInlines):

            Store cloned RenderInlines in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

2014-01-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        <hr> appears gray instead of green because of color attribute is defined followed by noshade attribute
        https://bugs.webkit.org/show_bug.cgi?id=17674

        Reviewed by Simon Fraser.

        The noshade attribute is a boolean attribute and when set on hr element
        it shows a gray color. When there is color attribute the default gray
        color should be replaced by the color mentioned by the color attribute.
        Firefox and IE show the same behaviour but Webkit is different. Making
        the behaviour of Webkit similiar to Firefox and IE's behaviour.

        Test: fast/dom/HTMLHrElement/hr-color-noshade-attribute.html

        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute):
        When the color attribute is present that value is applied and the 
        default gray color is ignored. Incase of no color attribute the default
        gray color is applied.

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126499> Move WebKit off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        Since WebKit1 is API on OS X but SPI on iOS, some indirection is still needed in the
        availability macros to allow the headers to advertise the API as unavailable on OS X
        without interfering with the ability to build on iOS. This is achieved by defining
        WEBKIT-prefixed versions of the Foundation availability macros that are defined to
        their NS-prefixed equivalents. The installed headers are post-processed to map these
        macros back to their Foundation equivalents.

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

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebKitAvailability.h: Added. This lives at the WebCore level since it
        will be needed by the Objective-C DOM bindings.

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

        Move responsibility for remote layer tree committing to RemoteLayerTreeDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=126501

        Reviewed by Sam Weinig.

        Add type-safe casting to GraphicsLayer.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isGraphicsLayerCA):
        (WebCore::GraphicsLayer::isGraphicsLayerCARemote):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::isGraphicsLayerCA):

2014-01-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Ensure that the autotools build and the CMake install the same files
        https://bugs.webkit.org/show_bug.cgi?id=116379

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Reformat some install directives to be consistent with the rest of them.
        Install the GObject DOM bindings headers.

2014-01-05  Andreas Kling  <akling@apple.com>

        Use lineageOfType to simplify two rendering helpers.
        <https://webkit.org/b/126498>

        Reviewed by Antti Koivisto.

        * rendering/RenderRuby.cpp:
        (WebCore::findRubyRunParent):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::findTreeRootObject):

            Simplify two functions that walk their parent chain to find the
            closest ancestor of a certain type.

        * rendering/RenderRubyRun.h:

            Add requisite isRendererOfType<RenderRubyRun>().

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

        Fix the Mac build too.

        * page/PageThrottler.h:

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

        Weekend URTBF after r161319 to make non Mac builds work again.

        * page/PageThrottler.h:

2014-01-05  Gavin Barraclough  <barraclough@apple.com>

        Move process suppression of WebProcess to Page (from UIProcess)
        https://bugs.webkit.org/show_bug.cgi?id=126480

        Reviewed by Sam Weinig.

        Let each page take a UserActivity rather than having to coalesce this state, and take different activity
        tokens for normal visibility and suppression disabled, so we can see why the process is not suppressed.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::setIsVisuallyIdle):
        * page/Page.h:
            - setThrottled -> setIsVisuallyIdle.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - Initialize m_visuallyNonIdle.
        (WebCore::PageThrottler::~PageThrottler):
            - setThrottled -> setIsVisuallyIdle.
        (WebCore::PageThrottler::setIsVisuallyIdle):
            - Use m_visuallyNonIdle to disable supression when the page is not visually idle.
        * page/PageThrottler.h:
            - setThrottled -> setIsVisuallyIdle, added m_visuallyNonIdle.

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move a few more functions from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126494

        Reviewed by Andreas Kling.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::adjustInlineDirectionLineBounds):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        These are only used by RenderBlockFlow, so move them there.

2014-01-04  Simon Fraser  <simon.fraser@apple.com>

        Prepare the ScrollingTree for remote use
        https://bugs.webkit.org/show_bug.cgi?id=126493

        Reviewed by Sam Weinig.

        When committing the scrolling tree, we clone the ScrollingStateTree
        to hand off to another thread, or (in future) to encode to send to the
        UI process. During this cloning process, two types of layer transformations
        take place: for threaded scrolling, we replace GraphicsLayer with PlatformLayers.
        For remote scrolling, we'll replace GraphicsLayers with PlatformLayerIDs.
        Allow the ScrollingCoordinator to specify which type of transformation occurs
        by giving ScrollingStateTree a LayerRepresentation::Type member,
        which is consulted during ScrollingStateNode cloning.
        
        Also only copy layers that have changed to avoid setting dirty bits.
        
        Expose some other stuff on ScrollingStateTree which will be needed for
        remote scrolling.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::toRepresentation):
        (WebCore::ScrollingStateNode::changedProperties):
        (WebCore::ScrollingStateNode::setChangedProperties):
        (WebCore::ScrollingStateNode::parentNodeID):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::setRemovedNodes):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::nodeCount):
        (WebCore::ScrollingStateTree::nodeMap):
        (WebCore::ScrollingStateTree::preferredLayerRepresentation):
        (WebCore::ScrollingStateTree::setPreferredLayerRepresentation):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move LineBreaker functions to LineBreaker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126491

        Reviewed by Simon Fraser.

        - Moves LineBreaker::nextLineBreak() and LineBreaker::nextSegmentBreak() to
          LineBreaker.cpp from RenderBlockLineLayout.cpp
        - Moves requiresIndent() to LineWidth.h/cpp from RenderBlockLineLayout.cpp
          so it can be shared.
        - Adds missing inline specifier to BreakingContext::handleEndOfLine() to avoid
          duplicate symbols.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::requiresIndent):
        * rendering/line/LineWidth.h:

2014-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Fix the video and audio build
        https://bugs.webkit.org/show_bug.cgi?id=126464

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Complete the audio and video source lists.

2014-01-04  Zan Dobersek  <zdobersek@igalia.com>

        Explicitly use the std:: nested name specifier when using std::pair, std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=126439

        Reviewed by Andreas Kling.

        Instead of relying on std::pair and std::make_pair symbols being present in the current scope
        through the pair and make_pair symbols, the std:: specifier should be used explicitly.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathPrescripts):
        (WebCore::AccessibilityRenderObject::mathPostscripts):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnAtIndex):
        (webkitAccessibleTableGetRowAtIndex):
        (webkitAccessibleTableGetColumnExtentAt):
        (webkitAccessibleTableGetRowExtentAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * bindings/js/SerializedScriptValue.cpp:
        * dom/ContainerNode.cpp:
        * dom/StyledElement.cpp:
        (WebCore::attributeNameSort):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        * html/parser/HTMLMetaCharsetParser.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        * inspector/InspectorAgent.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):
        * loader/cache/CachedImage.h:
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        * platform/graphics/WidthIterator.cpp:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/text/AtomicStringKeyedMRUCache.h:
        * platform/text/LineBreakIteratorPoolICU.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageSizeForError):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderTableSection.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger):
        (WebCore::SVGAnimatedType::createNumberOptionalNumber):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::integerOptionalInteger):
        (WebCore::SVGAnimatedType::numberOptionalNumber):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        * svg/SVGParserUtilities.h:
        * svg/animation/SMILTimeContainer.h:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix EFL build.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::setHasChangedProperties):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Clean up the means of committing the scrolling state tree
        https://bugs.webkit.org/show_bug.cgi?id=126482

        Reviewed by Tim Horton.

        ScrollingStateNodes would manually call scrollingStateTree().setHasChangedProperties()
        after setPropertyChanged() in lots of places, which was repetitive, and
        AsyncScrollingCoordinator manually called scheduleTreeStateCommit() in many places.
        
        Clean up both of these with a clearer trigger for state tree commits.
        ScrollingStateNodes::setPropertyChanged() calls ScrollingStateTree::setHasChangedProperties(),
        which turns around and tells the ScrollingCoordinator that the state tree became dirty.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreePropertiesChanged):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChanged):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::create):
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::setHasChangedProperties):
        (WebCore::ScrollingStateTree::didRemoveNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Try to fix CoordinatedGraphics build after r161303. Remove implementations
        which are now in the cross-platform file.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp:
        * page/scrolling/coordinatedgraphics/ScrollingStateScrollingNodeCoordinatedGraphics.cpp:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Simplify ScrollingStateNode references to various layer types
        https://bugs.webkit.org/show_bug.cgi?id=126477

        Reviewed by Tim Horton.
        
        ScrollingStateNodes referenced both GraphicsLayer and PlatformLayers, in
        confusing ways. In the main thread they have a GraphicsLayer*, but need
        to check to see if the underlying PlatformLayer changed. Then, when
        cloned to commit to the scrolling thread, they drop the GraphicsLayer
        and store a PlatformLayer.
        
        Hide the complexity (and prepare for the future) by adding LayerRepresentation,
        which wraps various different flavors of layers, and knows how to check whether
        the PlatformLayer underlying a GraphicsLayer changed.
        
        ScrollingStateNode layer setters then just take and compare LayerRepresentations.
        Copy constructors convert to a PlatformLayer representation (though not really
        in the right place currently), and ScrollingTreeNodes get PlatformLayers.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::LayerRepresentation):
        (WebCore::LayerRepresentation::operator GraphicsLayer*):
        (WebCore::LayerRepresentation::operator PlatformLayer*):
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::operator ==):
        (WebCore::LayerRepresentation::toPlatformLayer):
        (WebCore::LayerRepresentation::representsGraphicsLayer):
        (WebCore::LayerRepresentation::representsPlatformLayer):
        (WebCore::LayerRepresentation::representsPlatformLayerID):
        (WebCore::ScrollingStateNode::layer):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Blit operation from Multisample FBO to rendering FBO must ignore GL_SCISSOR test
        https://bugs.webkit.org/show_bug.cgi?id=126470
        <rdar://problem/15201370>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Temporarily deactivate the GL_SCISSOR
        test while we do our blit, then reactivate if necessary.

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] CGLPixelFormat should specify SampleBuffer and Sample count when using MSAA
        https://bugs.webkit.org/show_bug.cgi?id=126468

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Add kCGLPFAMultisample, kCGLPFASampleBuffers (and count), and
        kCGLPFASamples (and count) to our pixel format when 'antialias=true'.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Pass a new 'antialias' flag to the setPixelFormat
        method so we can turn on MSAA features when needed.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Give all PlatformCALayers a PlatformLayerID, not just remote ones
        https://bugs.webkit.org/show_bug.cgi?id=126466

        Reviewed by Tim Horton.

        The ScrollingStateTree has references to both GraphicsLayers and PlatformLayers
        which is confusing, and is necessary because the underlying PlatformLayer
        inside a GraphicsLayer can change. In order to hide some of this complexity,
        expose GraphicsLayer::primaryLayerID() which is a PlatformLayerID that clients
        can hold onto to test for underlying layer swapping.
        
        Also constify LayerType m_layerType on PlatformCALayer, which required
        cleaning up the construction of PlatformCALayerMac in the case where a
        PlatformCALayerMac is wrapping an existing CALayer (which happens for video).

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::generateLayerID):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::layerID):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::create):
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::commonInit):

2014-01-03  Andreas Kling  <akling@apple.com>

        Add lineageOfType renderer iterator and start using it.
        <https://webkit.org/b/126456>

        Add a convenient way to iterate over a renderers ancestry *including*
        the starting point renderer (if it meets the type criteria.)

        This works just like lineageOfType for Elements.

        Reviewed by Geoffrey Garen.

        * rendering/RenderAncestorIterator.h:
        (WebCore::lineageOfType):

            Added. Returns an adapter for walking a renderer's entire lineage
            matching any renderer of the given type.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayerModelObject.h:

            Add the requisite isRendererOfType<T> helpers.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::enclosingFloatPaintingLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::enclosingBox):
        (WebCore::RenderObject::enclosingBoxModelObject):

            Simplify with lineageOfType. Added some FIXMEs about functions
            that should return references instead of pointers.

2014-01-03  Martin Robinson  <mrobinson@igalia.com>

        Small build fix for the GTK+ CMake port

        * PlatformGTK.cmake: Add an IDL file that is missing from the list of IDLs
        used to generate GObject DOM bindings.

2014-01-03  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/css changes
        https://bugs.webkit.org/show_bug.cgi?id=126237

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Added iOS-specific code and FIXME comment.
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext): Ditto.
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPropertyNames.in: Added property -webkit-composition-fill-color. Also added FIXME comment.
        * css/CSSValueKeywords.in: Added iOS-specific -apple-system-* values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Added iOS-specific code and FIXME comments.
        * css/MediaFeatureNames.h: Added media feature -webkit-video-playable-inline.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::isRunningOnIPhoneOrIPod): Added. Also added FIXME comment.
        (WebCore::video_playable_inlineMediaFeatureEval): Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Substitute toHTMLMediaElement() for toMediaElement().
        (WebCore::StyleResolver::applyProperty): Added iOS-specific code and FIXME comment.
        * css/html.css: Added iOS-specific CSS styles.
        (input, textarea, keygen, select, button, isindex):
        (isindex):
        (input[type="date"]):
        (input[type="datetime"]):
        (input[type="datetime-local"]):
        (input[type="month"]):
        (input[type="time"]):
        (textarea):
        (input:-webkit-autofill):
        (input[type="radio"], input[type="checkbox"]):
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        (input[type="range"]::-webkit-slider-thumb:active):
        (input:disabled, textarea:disabled):
        (input[readonly], textarea[readonly]):
        (textarea::-webkit-input-placeholder):
        (input[type="checkbox"]):
        (input[type="radio"]):
        (input[type="checkbox"]:checked, input[type="radio"]:checked):
        (input[type="checkbox"]:checked:disabled, input[type="radio"]:checked:disabled):
        (select:focus):
        (select):
        * css/mathml.css: Added iOS-specific CSS styles.
        (math, mfenced > *):
        (mo, mfenced):
        * css/mediaControlsiOS.css: Added.
        * css/svg.css: Added iOS-specific CSS styles.
        (text, tspan, tref):

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] glScissor test is not accounted for when generating internal rendering textures.
        https://bugs.webkit.org/show_bug.cgi?id=126455
        <rdar://problem/15744206>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Check state of GL_SCISSOR_TEST and GL_DITHER, deactivate them during
        our internal drawing, then turn them back on for further processing.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Maybe fix Windows build.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2014-01-03  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Enable JavaScript Media Controls on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=126440

        Reviewed by Eric Carlson.

        Drive-by misspelling fix, and add a convenience function to check if the
        controls are currently hidden:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.handleWrapperMouseOut):
        (Controller.prototype.updatePlaying):
        (Controller.prototype.controlsAreHidden): Added.

        Add a new subclass of Controller for iOS and a matching CSS:
        * Modules/mediacontrols/mediaControlsiOS.css: Added.
        * Modules/mediacontrols/mediaControlsiOS.js: Added.
        (createControls): Override the createControls() in mediaControlsApple.js.
        (ControllerIOS): Define a new class.
        (ControllerIOS.prototype.inheritFrom): Convenience method to mixin parent
            prototype methods.
        (ControllerIOS.prototype.createBase): Override, listen for touches instead of mouse events.
        (ControllerIOS.prototype.createControls): Ditto.
        (ControllerIOS.prototype.configureInlineControls): Override, only add play, timeline, and full
            screen butttons.
        (ControllerIOS.prototype.configureFullScreenControls): Override, and add no buttons.
        (ControllerIOS.prototype.handlePlayButtonTouchStart): Activate.
        (ControllerIOS.prototype.handlePlayButtonTouchEnd): De-activate and do action.
        (ControllerIOS.prototype.handlePlayButtonTouchCancel): De-activate and cancel.
        (ControllerIOS.prototype.handleWrapperTouchStart): Show controls.
        (ControllerIOS.prototype.handlePanelTouchStart): Disable video selection.
        (ControllerIOS.prototype.handlePanelTouchEnd): Re-enable video selection.
        (ControllerIOS.prototype.handlePanelTouchCancel): Ditto.

        Drive-by fix to enable the JavaScript controls when the plugin is disabled:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

        Add the iOS JavaScript by appending it to the generic (Apple) JavaScript:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

        Add new files to project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow the ChromeClient to provide a custom ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126450

        Reviewed by Tim Horton.
        
        Some platforms will want to provide a custom ScrollingCoordinator, so let
        them do so by asking ChromeClient first for one.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::createScrollingCoordinator):
        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator):

2014-01-03  Andreas Kling  <akling@apple.com>

        Deploy more child renderer iterators in RenderBlockFlow.
        <https://webkit.org/b/126434>

        Reviewed by Sam Weinig.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):

            Make this helper take a RenderBlockFlow instead of a RenderObject
            and simplified it a bit. RenderDeprecatedFlexibleBox does not
            derive from RenderBlockFlow so those checks can be omitted.

        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::RenderBlockFlow::clearTruncation):

            Use childrenOfType to iterate over block and block-flow children.
            Tweaked some early return/continue to reduce nesting.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow different types of ScrollingTrees to have different types of ScrollingTreeNode subclasses
        https://bugs.webkit.org/show_bug.cgi?id=126445

        Reviewed by Tim Horton.
        
        Make it possible to have ScrollingTree subclasses with different subclasses of ScrollingTreeNodes,
        by giving ScrollingTree a pure virtual createNode() function. ThreadedScrollingTree implements
        this, and then delegates node creation to its AsyncScrollingCoordinator (since we have
        a ScrollingCoordinatorMac but no real need for a ThreadedScrollingTreeMac).
        
        Also made ThreadedScrollingTree's m_scrollingCoordinator an AsyncScrollingCoordinator,
        since by definition a threaded scrolling tree uses an async coordinator.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::createNode):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::create):

2014-01-03  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed build fix.

        * platform/UserActivity.h:
            - case fix.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Reviewed by Sam Weinig.

        UserActivity is a mechanism to express to the operating system (where appropriate)
        that a user initiated activity is taking place, and as such that resources should be
        made available to the process accordingly.

        Currently we hold a single NSActivity, at the WebKit layer. This refactoring allows us
        to hold different activity tokens for different user actions (which simplifies the
        handling, and aides debugging since the token can more accurately express the activity
        taking place), and also will allow us to avoid the layering difficulty of calling back
        up the stack to WebKit to register that an activity is taking place.

        * WebCore.xcodeproj/project.pbxproj:
            - added new files.
        * platform/UserActivity.cpp: Added.
        (WebCore::UserActivity::UserActivity):
            - nop implementation - ignore description.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - nop implementation - just inc/dec m_count.
        * platform/UserActivity.h: Added.
        (WebCore::UserActivity::isActive):
            - returns true if one or more instance of this activity is in progress.
        * platform/mac/UserActivityMac.mm: Added.
        (WebCore::UserActivity::UserActivity):
            - constructor accepts one argument, a description string.
        (WebCore::UserActivity::isValid):
            - used by assertions.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - track start/end of an activity - calls to these methods should be balanced.
        (WebCore::UserActivity::hysteresisTimerFired):
              - used to implement hysteresis in releasing  NSActivity.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Line ending conversion should be able to handle strings with null chars
        https://bugs.webkit.org/show_bug.cgi?id=126202

        This is a merge from Blink.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/local/formdata/send-form-data-with-string-containing-null.html

        * platform/text/LineEnding.cpp: (WebCore::normalizeToCROrLF): Do it right.

2014-01-03  Alberto Garcia  <berto@igalia.com>

        WebKit-GTK 1.8.1 does not build on OS X 10.7
        https://bugs.webkit.org/show_bug.cgi?id=88407

        Reviewed by Carlos Garcia Campos.

        Replace non-portable 'echo -n' with 'true'.

        * GNUmakefile.am:

2014-01-03  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=126428

        Reviewed by Brent Fulgham.

        The NativeImagePtr type is not an CGImageRef on WinCairo, cannot use CFRetain.

        * loader/cache/MemoryCache.cpp: Replace USE(CF) with USE(CG).
        * loader/cache/MemoryCache.h: Ditto.

2014-01-03  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify FloatRoundedRect, BoxShape construction
        https://bugs.webkit.org/show_bug.cgi?id=125995

        Reviewed by Andreas Kling.

        Cleanup of various internal Shape issues:
        - Removed unnecessary Shape() initialization list entries in Shape subclasses
          per https://bugs.webkit.org/show_bug.cgi?id=125548#c2.
        - Used const references instead of pointers for non-deprecated Shape:createShape() logic.
        - Replaced createShape() overloads for Rasters and Boxes with functions named
          createRasterShape() and createBoxShape().
        - Added a FloatRoundedRect::Radii() constructor to reduce the parameter list
          length of the FloatRoundedRect constructor in createBoxShape().

        There are no new tests, this is just internal refactoring.

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::Radii::Radii):
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createInsetShape):
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):

2014-01-03  Andreas Kling  <akling@apple.com>

        Remove unused Document::openSearchDescriptionURL().
        <https://webkit.org/b/126419>

        Reviewed by Antti Koivisto.

        * dom/Document.h:
        * dom/Document.cpp:

            Scrub leftovers from the defunct Chromium port.

2014-01-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        VibrationPattern should allocate an single vector instance for single integer input
        https://bugs.webkit.org/show_bug.cgi?id=126417

        Reviewed by Gyuyoung Kim.

        When the Vibration pattern is set with a single integer, the VibrationPattern should
        be set with this integer as a vibration time. But the VibrationPattern(unsigned vector) was
        initialized with a single parameter, the vibration time, so the time was used to set
        the size of vector.

        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):

2014-01-02  Jaehun Lim  <ljaehun.lim@samsung.com>

        IconController.cpp needs to include <wtf/text/CString.h>
        https://bugs.webkit.org/show_bug.cgi?id=126415

        Reviewed by Gyuyoung Kim.

        Build fails in IconController.cpp when ICONDATABASE is disabled.
        WebKit/Source/WebCore/loader/icon/IconController.cpp:124:110: error: invalid use of incomplete type ‘class WTF::CString’
        IconController.cpp needs #include <wtf/text/CString.h>.

        No new tests. Just build fix.

        * loader/icon/IconController.cpp: Add #include statement.

2014-01-02  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Previous scrollbar is remained sometimes
        https://bugs.webkit.org/show_bug.cgi?id=126414

        Reviewed by Gyuyoung Kim.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::invalidate):
        Updated scrollbar visibility in Scrollbar::invalidate().
        * platform/efl/ScrollbarEfl.h:
        Removed show()/hide() which never been called() for scrollbar.

2014-01-02  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        Tested by revisions to webgl/1.0.2/conformance/glsl/misc/shader-with-array-of-structs-containing-arrays.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise to
        handle access to zeroeth element of the array.

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in WebCore::translateIntersectionPointsToSkipInkBoundaries
        https://bugs.webkit.org/show_bug.cgi?id=126252

        Reviewed by Alexey Proskuryakov.

        lastIntermediate was a iterator pointing into a Vector, which was being re-used
        even while appending to the Vector. If any of the append operators triggered
        a realloc, the iterator would point to the old free'ed memory.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-crash-many-gaps.html

        * rendering/InlineTextBox.cpp:
        (WebCore::translateIntersectionPointsToSkipInkBoundaries):

2014-01-02  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise code to handle the case of single-element
        arrays.

2014-01-02  Sam Weinig  <sam@webkit.org>

        Update Promises to the https://github.com/domenic/promises-unwrapping spec
        https://bugs.webkit.org/show_bug.cgi?id=120954

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/runtime/JSPromiseDeferred.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Removed.
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::DeferredWrapper):
        (WebCore::DeferredWrapper::promise):
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        (WebCore::DeferredWrapper::resolve<String>):
        (WebCore::DeferredWrapper::resolve<bool>):
        (WebCore::char>>):
        (WebCore::DeferredWrapper::reject<String>):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.h:

2014-01-02  Tim Horton  <timothy_horton@apple.com>

        ImageBufferBackingStoreCache should use DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126155

        Reviewed by Anders Carlsson.

        Since ImageBufferBackingStoreCache's purge timer is pushed out every time
        a backing store is deallocated, we can easily waste a lot of time rescheduling
        the timer. Since it's a cache purge timer and doesn't need that kind of precision,
        adopt DeferrableOneShotTimer, which is much more performant when deferred frequently.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen. Modifications reviewed by Tim Horton.

        This patch is taken from r160945, but the modifications to ImageBufferCG.cpp
        have been reverted.

        This test adds a static class, ImageBufferBackingStoreCache, that vends 
        IOSurfaces. It remembers IOSurfaces that have been returned to it until 
        a configurable timeout. 

        The storage used by this class is in the form of a HashMap from a 
        bucketed size to the IOSurface. There are many other data structures 
        that could be used, but this implementation gives a 80% hit rate on 
        normal browsing of some example sites with Canvas and 
        text-decoration-skip: ink. Because the buckets are fairly 
        small (rounding the width and height up to multiples of 8), traversing the 
        bucket contents takes on average 2 steps.  

        Test: fast/canvas/canvas-backing-store-reuse.html 

        * WebCore.xcodeproj/project.pbxproj: Added new caching class 
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added. 
        (WebCore::createIOSurface): Copied from ImageBufferCG.cpp 
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache 
        contents 
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer): 
        (WebCore::ImageBufferBackingStoreCache::get): Static getter 
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache): 
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management 
        creation function 
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management 
        deletion function 
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached 
        IOSurface fit the bill? 
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup 
        a bucket and walk through its contents 
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function 
        for clients who want a IOSurface from the cache 
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public 
        function for clients to return an IOSurface to the pool 
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added. 
        (WebCore::ImageBuffer::ImageBuffer): 
        (WebCore::ImageBuffer::~ImageBuffer): 

2014-01-02  Piotr Grad  <p.grad@samsung.com>

        Video-seek-with-negative-playback was flaky.
        https://bugs.webkit.org/show_bug.cgi?id=126379

        Reviewed by Eric Carlson.

        No new tests. Covered by existing tests.

        m_player->setRate() should be called before updating m_playbackRate, because potentiallyPlaying() depends
        on endedPlayback(), which checks m_playbackRate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setPlaybackRate):

2014-01-02  Daniel Bates  <dabates@apple.com>

        [iOS] Tapping any link crashes in WebCore::EventHandler::mouseMoved()
        (also crashes when scrolling certain sites)
        https://bugs.webkit.org/show_bug.cgi?id=126401
        <rdar://problem/15739334>

        Reviewed by Tim Horton.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::currentEventSlot): Make the shared variable have static-storage duration.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Remove WindowIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=126270

        Reviewed by Tim Horton.

        We currently track visibility in two ways - ViewState::IsVisible and ViewState::WindowIsVisible.
        The latter detects that the content is hidden in fewer cases than the former, and as such, the
        former is always preferable.

        This affects the hidden state provided to FocusController::contentAreaDidShowOrHide and to
        Plugin::windowVisibilityChanged.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
            - rename ContainingWindowIsVisible -> ContentIsVisible.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Merge didMoveOnscreen / page visibility to isVisible
        https://bugs.webkit.org/show_bug.cgi?id=126268

        Reviewed by Tim Horton.

        The onscreen state most closely tracks view visibility (though currently
        also tracks a mix of in-window state). Make more consistent, simplify,
        and move all animation suspension logic to Page, so it can be controlled
        by the PageThrottler.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSetCursor):
        * page/Page.cpp:
        (WebCore::Page::Page):
            - initialize new variables.
        (WebCore::Page::setIsVisible):
            - merge setVisibilityState, didMoveOnscreen, willMoveOffscreen.
        (WebCore::Page::setIsPrerender):
            - switches visibility state from hidden to prerender.
        (WebCore::Page::visibilityState):
            - computed from m_isVisible, m_isPrerender.
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_visibilityState -> m_isVisible.
        * page/Page.h:
            - remove didMoveOnscreen/willMoveOffscreen
              m_isOnscreen & m_visibilityState -> m_isVisible & m_isPrerender
              setVisibilityState -> setIsVisible & setIsPrerender.
        (WebCore::Page::isVisible):
            - isOnscreen -> isVisible.

2014-01-02  Oliver Hunt  <oliver@apple.com>

        Update bindings test results

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by Antti Koivisto.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2014-01-02  Simon Fraser  <simon.fraser@apple.com>

        Add AsyncScrollingCoordinator, which is a base class for threaded and future remote ScrollingCoordinators
        https://bugs.webkit.org/show_bug.cgi?id=126389

        Reviewed by Tim Horton.

        Add AsyncScrollingCoordinator, a ScrollingCoordinator that knows about ScrollingStateTrees
        and ScrollingTrees, but leaves it up to subclasses to decide when and how to commit.

        * WebCore.xcodeproj/project.pbxproj: Added AsyncScrollingCoordinator.*
        * page/scrolling/AsyncScrollingCoordinator.cpp: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::~AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::detachFromStateTree):
        (WebCore::AsyncScrollingCoordinator::clearStateTree):
        (WebCore::AsyncScrollingCoordinator::syncChildPositions):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::updateMainFrameScrollLayerPosition):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::AsyncScrollingCoordinator::isRubberBandInProgress):
        (WebCore::AsyncScrollingCoordinator::setScrollPinningBehavior):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/AsyncScrollingCoordinator.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (WebCore::AsyncScrollingCoordinator::scrollingTree):
        (WebCore::AsyncScrollingCoordinator::setScrollingTree):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTree):
        (WebCore::AsyncScrollingCoordinator::releaseScrollingTree):
        * page/scrolling/ScrollingCoordinator.h: Add casting support.
        (WebCore::ScrollingCoordinator::isAsyncScrollingCoordinator):
        * page/scrolling/ThreadedScrollingTree.h: commitNewTreeState() needs to be public.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Lots of code moved to AsyncScrollingCoordinator.
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::~ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::pageDestroyed):
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        (WebCore::ScrollingCoordinatorMac::updateTiledScrollingIndicator):

2014-01-02  Andreas Kling  <akling@apple.com>

        Simplify the insides of DocumentSharedObjectPool and reduce memory usage.

        Merging Blink r164152 by Elliott Sprehn.

        Instead of storing an OwnPtr to an object that has a pointer to the
        ShareableElementData as well as a pointer into the ShareableElementData
        and the length we can just store a RefPtr to the SharableElementData.

        This also reduces the memory usage of the pool by 2 pointers per entry.

        * dom/DocumentSharedObjectPool.h:
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::attributeHash):
        (WebCore::hasSameAttributes):
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):

2014-01-02  Dirk Schulze  <krit@webkit.org>

        Support <box> values computed style for 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126148

        Reviewed by Simon Fraser.

        Calculate computed style for 'clip-path' property.

        Updated tests to check for computed style.

        * css/BasicShapeFunctions.cpp: Add box value bounding-box.
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        * css/CSSComputedStyleDeclaration.cpp: Return the computed style
            for 'clip-path'.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/DeprecatedStyleBuilder.cpp: Create CSSValueLists for 'clip-th'.
        (WebCore::ApplyPropertyClipPath::applyValue):
        * rendering/ClipPathOperation.h: Add bounding-box value.
        (WebCore::ShapeClipPathOperation::pathForReferenceRect):
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::pathForReferenceRect):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/ShapeInfo.h: Add bounding-box value.
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/style/BasicShapes.cpp: Add bounding-box value.
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:

2014-01-02  Antti Koivisto  <antti@apple.com>

        Always resolve style from root
        https://bugs.webkit.org/show_bug.cgi?id=126380

        Reviewed by Andreas Kling.
        
        Forced style resolve that does not start from the root is never really correct. 
        Remove the few remaining instances.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setResetStyleInheritance):
        
            Update style asynchronously.

        * dom/ShadowRoot.h:
        * dom/Text.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache):
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache):
        
            Delete the render tree synchronously on suspend and rebuild it asynchronously on resume.
            No need for m_customStyleForPageCache hack.

        * html/HTMLPlugInImageElement.h:
        
            Remove m_customStyleForPageCache.

        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove Element version of resolveTree from the interface.

        * svg/SVGUseElement.h:

2014-01-02  Antti Koivisto  <antti@apple.com>

        Remove PlaceholderDocument
        https://bugs.webkit.org/show_bug.cgi?id=126382

        Reviewed by Andreas Kling.

        Remove PlaceholderDocument class and replace it with a bit in Document.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createRenderTree):
        * dom/Document.h:
        
            Also make Synthesized a construction flag instead of a boolean parameter.

        (WebCore::Document::createNonRenderedPlaceholder):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::createSynthesizedDocument):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/PlaceholderDocument.cpp: Removed.
        * loader/PlaceholderDocument.h: Removed.
        * pdf/ios/PDFDocument.h:
        (WebCore::PDFDocument::PDFDocument):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove public attachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126368

        Reviewed by Andreas Kling.

        Remove the remaining explicit render tree construction.

        * dom/Document.cpp:
        (WebCore::Document::createRenderTree):
        
           Use recalcStyle() instead of calling attachRenderTree directly.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText):
        
            Remove forgotten attachTextRenderer.

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        
            Remove willAttachRenderers/didAttachRenderers hack.

        * html/shadow/InsertionPoint.h:
        (WebCore::toInsertionPoint):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        
            Seriously, nothing to do here.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        
            Making attaching and detaching distributed insertion point children part of ResolveTree internals.

        * style/StyleResolveTree.h:
        
            Remove interfaces with no clients.

2014-01-01  Seokju Kwon  <seokju@webkit.org>

        Remove stale ScriptProfiler methods
        https://bugs.webkit.org/show_bug.cgi?id=126373

        Reviewed by Darin Adler.

        No new tests, No change behavior. 

        * bindings/js/ScriptProfiler.h: Remove dead code.

2014-01-01  Andreas Kling  <akling@apple.com>

        Remove ChromeClient::fullScreenRendererChanged().
        <https://webkit.org/b/126370>

        This hook was added in r75277 to notify WebFullScreenController when
        the full screen renderer changed. In r110216 the code was refactored,
        making this notification unnecessary.

        Reviewed by Antti Koivisto.

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Fix the build by exposing some more scrolling state node headers
        as Private in WebCore.framework.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed build fix after r160903 when ACCESSIBILITY is disabled

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::children):

2014-01-01  Andreas Kling  <akling@apple.com>

        RenderScrollbar: Map of scrollbar parts should use RenderPtr.
        <https://webkit.org/b/126367>

        Turn RenderScrollbar::m_parts into HashMap of RenderPtrs. This makes
        renderer destruction automatic and lets us remove some code.

        Reviewed by Antti Koivisto.

        * rendering/RenderPtr.h:

            Add HashTraits for RenderPtr so we can use them as values in
            WTF hash tables.

        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::~RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):

            Remove now-unneeded kludges of logic to manually delete scrollbar
            part renderers in various scenarios.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove reattachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126366

        Reviewed by Andreas Kling.

        Remove the last remaining client.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer):
        (WebCore::HTMLSelectElement::selectOption):
        
            It is not safe to cast the renderer based on usesMenuList test. Switch to RenderObject::isMenuList test.

        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove the function.

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Create a ThreadedScrollingTree subclass of ScrollingTree, and push all knowledge of the scrolling thread into it
        https://bugs.webkit.org/show_bug.cgi?id=126362

        Reviewed by Sam Weinig.

        Eventually we'll have a ScrollingTree in situations where there is no scrolling
        thread, so make the ScrollingTree base class thread-agnostic (but threadsafe),
        and subclass it in ThreadedScrollingTree for scrolling-thread-specific functionality.
        
        The ScrollingTree base class also no longer needs to know about the
        ScrollingCoordinator.

        ScrollingCoordinatorMac creates a ThreadedScrollingTree.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add ThreadedScrollingTree.*
        Make some headers Private that we'll need in WebKit2 soon.
        * page/scrolling/ScrollingStateTree.h: Drive-by cleanup: clone() was unimplemented.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::~ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Wrap up some logic that
        involves taking the mutex, so ThreadedScrollingTree can conveniently call it.
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isHandlingProgrammaticScroll):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isThreadedScrollingTree):
        (WebCore::ScrollingTree::invalidate):
        * page/scrolling/ThreadedScrollingTree.cpp: Added.
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::~ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::tryToHandleWheelEvent):
        (WebCore::ThreadedScrollingTree::handleWheelEvent):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::commitNewTreeState):
        (WebCore::ThreadedScrollingTree::updateMainFrameScrollPosition):
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):
        * page/scrolling/ThreadedScrollingTree.h: Added.
        (WebCore::ThreadedScrollingTree::isThreadedScrollingTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):

2014-01-01  Andreas Kling  <akling@apple.com>

        FrameView: Store scroll corner renderer in a RenderPtr.
        <https://webkit.org/b/126364>

        Make FrameView::m_scrollCorner a RenderPtr<RenderScrollbarPart> and
        remove two manual destroy() calls.

        Reviewed by Antti Koivisto.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove elementChildren/elementDescendants shorthands
        https://bugs.webkit.org/show_bug.cgi?id=126363

        Reviewed by Anders Carlsson.

        Just use childrenOfType<Element>/descendantsOfType<Element> instead. They are not that much longer
        and consistency is valuable.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
        (WebCore::siblingWithAriaRole):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::namedItem):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::resetComputedStyle):
        * dom/ElementChildIterator.h:
        * dom/ElementDescendantIterator.h:
        * dom/SelectorQuery.cpp:
        (WebCore::elementsForLocalName):
        (WebCore::anyElement):
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        (WebCore::SelectorDataList::executeSingleClassNameSelectorData):
        (WebCore::SelectorDataList::executeSingleSelectorData):
        (WebCore::SelectorDataList::executeSingleMultiSelectorData):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * rendering/RenderChildIterator.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGUseElement.cpp:
        (WebCore::subtreeContainsDisallowedElement):
        (WebCore::removeDisallowedElementsFromSubtree):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Do less synchronous render tree construction
        https://bugs.webkit.org/show_bug.cgi?id=126359

        Reviewed by Anders Carlsson.

        Remove some now-unnecessary attachRenderTree calls.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree):
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::finishLine):
        (WebCore::HTMLViewSourceDocument::addBase):
        (WebCore::HTMLViewSourceDocument::addLink):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Updating the scrolling tree should use references to state nodes
        https://bugs.webkit.org/show_bug.cgi?id=126360

        Reviewed by Anders Carlsson.

        Change functions related to ScrollingTreeNode updating to take
        const references to state nodes rather than pointers.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::hasChangedProperty):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode): The node can be nil so
        this continues to take a pointer.
        (WebCore::ScrollingTree::removeDestroyedNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::updateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Add a typedef for PlatformLayerID on GraphicsLayer, and migrate RemoteLayerTreeTransaction to use it
        https://bugs.webkit.org/show_bug.cgi?id=126346

        Reviewed by Tim Horton.

        Remote scrolling tree code is soon going to use RemoteLayerTreeTransaction::LayerID,
        so it makes more sense to put this layerID type on GraphicsLayer as
        GraphicsLayer::PlatformLayerID.
        
        Also add some type cast macros for PlatformCALayer and subclasses, and use them
        where appropriate.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isPlatformCALayerMac):
        (WebCore::PlatformCALayer::isPlatformCALayerRemote):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        ScrollingStateNodes should have a reference to the ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=126348

        Reviewed by Sam Weinig.

        Make ScrollingStateNodes always belong to a ScrollingStateTree, and thus
        have a reference to the tree rather than a pointer. When cloning nodes,
        they are adopted by a new ScrollingStateTree, which adds them to its
        node map (which didn't happen before).
        
        In subclasses access the ScrollingStateTree through a member function.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::clone):
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::cloneAndReset):
        (WebCore::ScrollingStateNode::cloneAndResetChildren):
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::scrollingStateTree):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::create):
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::clone):
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::clone):
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::addNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollLayer):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        Give ScrollingStateNodes a nodeType()
        https://bugs.webkit.org/show_bug.cgi?id=126347

        Reviewed by Tim Horton.

        When we start serializing ScrollingStateNodes to send to the UI process,
        it's more convenient if they have a nodeType member rather than virtual functions,
        so give them one, and fix the casting macros to use it. This allows us to use
        a switch() on node creation, so the compiler will tell us if we forgot to create
        a node type.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h: const ScrollingNodeType field
        (can't be modified after construction), and move the m_scrollingStateTree
        member after it (the awkward protected:/private: will be cleaned up in a later patch).
        (WebCore::ScrollingStateNode::nodeType):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

2013-12-31  Andreas Kling  <akling@apple.com>

        Out-of-line RenderStyle substructure copying helpers.
        <https://webkit.org/b/126340>

        This shrinks the .access() calls by moving memory allocation logic
        out-of-line, though I'm really doing this to make Instruments.app
        allocations output more readable.

        Writes to e.g 'font' or 'color' will now be grouped under a single
        StyleInheritedData::copy() call instead of being spread out over
        setFontDescription(), setLineHeight(), setColor(), etc.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        RenderListItem should store its marker in a RenderPtr.
        <https://webkit.org/b/126298>

        Make RenderListItem::m_marker a RenderPtr<RenderListMarker> and
        remove two manual destroy() calls. Tweaked code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        Element's renderer factory should return RenderPtrs.
        <https://webkit.org/b/126318>

        Rename Element::createRenderer() to createElementRenderer() and have
        it return RenderPtr<RenderElement>. Propagate signature until it
        builds again.

        We leakPtr() the renderer at two call sites when handing things over
        to raw pointer API. This'll get tidied up in subsequent patches.

        Reviewed by Sam Weinig.

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Return early in ResourceHandle::receivedCancellation if the load has already cancelled
        https://bugs.webkit.org/show_bug.cgi?id=126287

        Reviewed by Martin Robinson.

        This situation can happen when using the network process, because
        the ReceivedCancellation message can be received when the resource
        loader has already been removed, but the authentication challenge
        still has a reference to the ResourceHandleClient.

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

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] The initiating page is lost after a redirection
        https://bugs.webkit.org/show_bug.cgi?id=126293

        Reviewed by Martin Robinson.

        The initiating page id is attached to the initial soup request
        object, but not to the one created after a redirection.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle): Call
        setSoupRequestInitiatingPageIDFromNetworkingContext() here if the
        soup request is created successfully.
        (WebCore::ResourceHandle::start): Remove the call to
        setSoupRequestInitiatingPageIDFromNetworkingContext().

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement ResourceHandle::continueWillSendRequest()
        https://bugs.webkit.org/show_bug.cgi?id=126291

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::continueAfterWillSendRequest): Helper function that
        continues with the load after willSendRequest has been called.
        (WebCore::doRedirect): Call continueAfterWillSendRequest() when
        client doesn't use async callbacks.
        (WebCore::ResourceHandle::continueWillSendRequest): Call
        continueAfterWillSendRequest().

2013-12-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] willSendRequest doesn't work after a redirect
        https://bugs.webkit.org/show_bug.cgi?id=126290

        Reviewed by Martin Robinson.

        The problem is that we are creating the new soup request for the
        redirect before calling ResourceHandleClient::willSendRequest() so
        that any change made to the request by the client is ignored.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Create the new soup request and soup
        message for the redirect after calling willSendRequest() on the
        client.

2013-12-30  Andreas Kling  <akling@apple.com>

        InputType should return input renderers wrapped in RenderPtr.
        <https://webkit.org/b/126307>

        Rename InputType::createRenderer() to createInputRenderer() and
        make it return RenderPtr<RenderElement>. Also made it non-const.

        Reviewed by Anders Carlsson.

2013-12-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Cleanup static_cast<HTMLFormElement*> by using toHTMLFormElement()
        https://bugs.webkit.org/show_bug.cgi?id=126309

        Reviewed by Andreas Kling.

        To detect bad type casts, it would be good to use toHTMLFormElement() instead of
        using manual type cast. Additionally FORM_ASSOCIATED_ELEMENT_TYPE_CASTS is introduced newly
        to do it.

        No new tests, no behavior changes.

        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2013-12-30  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-30  Andreas Kling  <akling@apple.com>

        Rename createRenderObject() to createRenderer().

        Somewhat rubber-stamped by Antti Koivisto.

2013-12-30  Andreas Kling  <akling@apple.com>

        Document should store its RenderView in a RenderPtr.
        <https://webkit.org/b/126299>

        Make Document::m_renderView a RenderPtr<RenderView> and remove one
        manual destroy() call. Also removed the setRenderView() helper and
        inlined it at the two call sites.

        Reviewed by Antti Koivisto.

2013-12-30  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Add support for GObject introspection
        https://bugs.webkit.org/show_bug.cgi?id=126162

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Build a list of WebKitDOM headers and expose it to the
        parent scope of the build.

2013-12-30  Andreas Kling  <akling@apple.com>

        Text::createTextRenderer() should return a RenderPtr.
        <https://webkit.org/b/126292>

        Make createTextRenderer() return a RenderPtr and remove one manual
        destroy() call. Also, since it should always return a valid object,
        I turned a null check into an assertion instead.

        Reviewed by Antti Koivisto.

2013-12-30  Antti Koivisto  <antti@apple.com>

        Remove attachChild
        https://bugs.webkit.org/show_bug.cgi?id=126288

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        
            Rename detachChild and move the tests here.

        (WebCore::ContainerNode::takeAllChildrenFrom):
        
            No need to call attachRenderTree explicitly anymore.

        (WebCore::ContainerNode::removeBetween):

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store corner and resizer renderers in RenderPtrs.
        <https://webkit.org/b/126274>

        Turn RenderLayer::m_scrollCorner and m_resizer into RenderPtrs.
        Removed manual destroy() calls as appropriate. Also tweaked some
        code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-30  Antti Koivisto  <antti@apple.com>

        XML document builder should create render tree asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=126285

        Reviewed by Andreas Kling.
        
        Stop creating renderers explicitly. 
        Fix SVG <use> element to not rely on parse time render tree construction.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        
            Remove renderer check, we may not have created the render tree yet.

        (WebCore::SVGUseElement::willAttachRenderers):
        
            Switch to willAttachRenderers from willRecalcStyle. The latter is only called as long as style
            recalc doesn't start creating new renderers.

        (WebCore::SVGUseElement::invalidateShadowTree):
        
            Remove renderer check, we may not have created the render tree yet. 
            Invalidate with ReconstructRenderTree so willAttachRenderers will always get called.

        * svg/SVGUseElement.h:
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::cdataBlock):
        
            Remove explicit call to attachRenderTree. The render tree will be created lazily.

2013-12-29  Joone Hur  <joone.hur@intel.com>

        Reverted r156742. The same fix was reverted from Blink due to heap-use-after-free on ClusterFuzz.
        https://bugs.webkit.org/show_bug.cgi?id=126275

        https://codereview.chromium.org/102993011

        Reviewed by Darin Adler.

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

2013-12-29  ChangSeok Oh  <changseok.oh@collabora.com>

        Remove unused functions in GraphicsContext3D.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126265

        Reviewed by Andreas Kling.

        platformGraphicsContext3D, platformTexture and platformLayer in GC3D.cpp
        seem not used by any ports.

        No new tests, no functionality changed.

        * platform/graphics/GraphicsContext3D.cpp:

2013-12-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build error on 64bit debug build.
        https://bugs.webkit.org/show_bug.cgi?id=126248

        r161076 used ‘%lli’(for long long int) for int64_t(aka long int).
        However, in a 64bit compile, int64_t is 'long int', not a 'long long int'.
        To support 32bit and 64bit, we use static_cast<long long>.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove some accidental commented out code.

        * testing/Internals.cpp:
        (WebCore::Internals::mallocStatistics):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Fix build.

        * xml/parser/XMLDocumentParser.cpp:

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove Node::attached()
        https://bugs.webkit.org/show_bug.cgi?id=126276

        Reviewed by Sam Weinig.

        Node::attached() is poorly defined. Replace it with renderer() and inRenderedDocument() tests as appropriate.
        
        Also remove some unnecessary explicit attachRenderTree/detachRenderTree calls from the tree builders.

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store reflection renderer in a RenderPtr.
        <https://webkit.org/b/126273>

        Reviewed by Anders Carlsson.

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::calculateClipRects):

            Turn RenderLayer::m_reflection into a RenderPtr<RenderReplica>
            instead of a raw pointer.

        * WebCore.xcodeproj/project.pbxproj:

            Add RenderPtr.h to private headers.

2013-12-28  Andreas Kling  <akling@apple.com>

        Add an owning smart pointer for RenderObjects and start using it.
        <https://webkit.org/b/126251>

        This patch adds a RenderPtr pointer, essentially an OwnPtr for
        RenderObjects. The difference is that RenderPtr destroys the object
        by calling destroy() on it.

        This is necessary to implement the willBeDestroyed() mechanism in
        RenderObject that notifies renderers just before they are about to
        be deleted, while they can still do tree traversal, etc.

        I also added a make_unique-alike helper so you can write:

            auto renderer = createRenderObject<RenderImage>(...);

        Put it all to use by making ContentData::createRenderer() return
        RenderPtr<RenderObject> instead of raw RenderObject*.

        Reviewed by Antti Koivisto.

2013-12-28  Benjamin Poulain  <benjamin@webkit.org>

        Add a missing include path for GTK
        https://bugs.webkit.org/show_bug.cgi?id=126257

        Reviewed by Philippe Normand.

        * GNUmakefile.am:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160733.

        * bindings/gobject/webkitdom.symbols:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Downloads are broken with the network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=126131

        Reviewed by Martin Robinson.

        The problem is that the network process crashes when trying to
        convert the handle to a download, because at that point the
        download has finished and the handle is NULL. This happens because
        we are not implementing ResourceHandle::continueDidReceiveResponse().

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::nextMultipartResponsePartCallback): Call
        continueAfterDidReceiveResponse() when not using async callbacks.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::continueAfterDidReceiveResponse): Helper function that
        continues the load after didReceiveResponse.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Call
        continueAfterDidReceiveResponse().

2013-12-27  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        * WebCore.vcxproj/WebCore.vcxproj.filters: Add files platform/audio/{AudioSession, AudioSessionListener}.h
        * WebCore.vcxproj/WebCoreCommon.props: Add directory WebCore/platform/audio to the list of
        include directories.

2013-12-27  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        Add files platform/audio/AudioSession.{cpp, h} and platform/audio/AudioSessionListener.h
        to the Visual Studio project. Note, the contents of these files are guarded by USE(AUDIO_SESSION),
        which is only enabled on Mac and iOS at the time of writing.

        I thought to try this approach to fix the build so as to avoid adding an extraneous
        USE(AUDIO_SESSION)-guard around the #include "AudioSession.h" in Settings.cpp since
        the contents of the file AudioSession.h is guarded by USE(AUDIO_SESSION).

        * WebCore.vcxproj/WebCore.vcxproj:

2013-12-27  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/page changes
        https://bugs.webkit.org/show_bug.cgi?id=126180

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        (WebCore::EventNames::isGestureEventType): Added.
        * page/AlternativeTextClient.h: Do not define WTF_USE_DICTATION_ALTERNATIVES when building for iOS.
        * page/Chrome.cpp:
        (WebCore::Chrome::Chrome):
        (WebCore::Chrome::dispatchViewportPropertiesDidChange): Added; guarded by PLATFORM(IOS).
        (WebCore::Chrome::setCursor): Make this an empty function when building for iOS.
        (WebCore::Chrome::setCursorHiddenUntilMouseMoves): Ditto.
        (WebCore::Chrome::didReceiveDocType): Added; iOS-specific.
        * page/Chrome.h:
        (WebCore::Chrome::setDispatchViewportDataDidChangeSuppressed): Added; guarded by PLATFORM(IOS).
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didFlushCompositingLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::fetchCustomFixedPositionLayoutRect): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::updateViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install): Added iOS-specific code.
        (WebCore::DOMTimer::fired): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow): Ditto.
        (WebCore::DOMWindow::innerHeight): Ditto.
        (WebCore::DOMWindow::innerWidth): Ditto.
        (WebCore::DOMWindow::scrollX): Ditto.
        (WebCore::DOMWindow::scrollY): Ditto.
        (WebCore::DOMWindow::scrollBy): Ditto.
        (WebCore::DOMWindow::scrollTo): Ditto.
        (WebCore::DOMWindow::clearTimeout): Ditto.
        (WebCore::DOMWindow::addEventListener): Ditto.
        (WebCore::DOMWindow::incrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::decrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::resetAllGeolocationPermission): Added; Also added FIXME comment.
        (WebCore::DOMWindow::removeEventListener): Added iOS-specific code.
        (WebCore::DOMWindow::dispatchEvent): Modified to prevent dispatching duplicate pageshow and pagehide
        events per <http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-pageshow>.
        (WebCore::DOMWindow::removeAllEventListeners): Added iOS-specific code.
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Added IOS_GESTURE_EVENTS-guarded attributes: ongesture{change, end, start}. Also
        added IOS_TOUCH_EVENTS-guarded attributes: {Touch, TouchList}Constructor.
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Added iOS-specific code.
        (WebCore::EventHandler::clear): Ditto.
        (WebCore::EventHandler::startPanScrolling): Make this an empty function when building for iOS.
        (WebCore::EventHandler::handleMousePressEvent): Modified to invalidate a click when the clicked node is
        null. Also, opt out of code for updating the scrollbars as UIKit manages scrollbars on iOS.
        (WebCore::EventHandler::handleMouseMoveEvent): Opt of code for updating the scrollbars and cursor when building on iOS.
        (WebCore::hitTestResultInFrame): Made this a file-local static function since it's only used in EventHandler.cpp.
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled): Added iOS-specific code.
        * page/EventHandler.h:
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Added iOS-specific code.
        (WebCore::Frame::scrollOverflowLayer): Added; iOS-specific.
        (WebCore::Frame::overflowAutoScrollTimerFired): Added; iOS-specific.
        (WebCore::Frame::startOverflowAutoScroll): Added; iOS-specific.
        (WebCore::Frame::checkOverflowScroll): Added; iOS-specific.
        (WebCore::Frame::willDetachPage): Added iOS-specific code.
        (WebCore::Frame::createView): Ditto.
        (WebCore::Frame::setSelectionChangeCallbacksDisabled): Added; iOS-specific.
        (WebCore::Frame::selectionChangeCallbacksDisabled): Added; iOS-specific.
        * page/Frame.h:
        (WebCore::Frame::timersPaused): Added; guarded by PLATFORM(IOS).
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Added iOS-specific code.
        (WebCore::FrameView::clear): Ditto.
        (WebCore::FrameView::flushCompositingStateForThisFrame): Ditto.
        (WebCore::FrameView::graphicsLayerForPlatformWidget): Added.
        (WebCore::FrameView::scheduleLayerFlushAllowingThrottling): Added.
        (WebCore::FrameView::layout): Added iOS-specific code.
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold): Added; helper function used by FrameView::renderedCharactersExceed().
        Also added FIXME comment.
        (WebCore::FrameView::renderedCharactersExceed): Added.
        (WebCore::FrameView::visibleContentsResized): Added iOS-specific code.
        (WebCore::FrameView::adjustTiledBackingCoverage): Ditto.
        (WebCore::FrameView::performPostLayoutTasks): Ditto.
        (WebCore::FrameView::sendResizeEventIfNeeded): Ditto.
        (WebCore::FrameView::paintContents): Added iOS-specific code. Also added FIXME comments.
        (WebCore::FrameView::setUseCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::setCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::updateFixedPositionLayoutRect): Added; iOS-specific.
        * page/FrameView.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::standalone): Added; iOS-specific.
        * page/Navigator.h:
        * page/Navigator.idl: Added WTF_PLATFORM_IOS-guarded attribute: standalone. Also added FIXME comment.
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform): Added iOS-specific code.
        * page/Page.h:
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        (WebCore::Page::customHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeVisitedLink): Added.
        * page/PageGroup.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setScriptEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setStandalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAudioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::audioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::sharedNetworkInterfaceNameGlobal): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkInterfaceName): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkInterfaceName): Added; guarded by PLATFORM(IOS).
        * page/Settings.h:
        (WebCore::Settings::setMaxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::maxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::standalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::telephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setMediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::mediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        * page/Settings.in: Added IOS_AIRPLAY-guarded setting: mediaPlaybackAllowsAirPlay.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Added iOS-specific code and FIXME comment.
        * page/ios/EventHandlerIOS.mm: Added.
        * page/ios/FrameIOS.mm: Added.
        * page/mac/ChromeMac.mm:
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair): Opt out of code when building for iOS.
        (WebCore::Page::removeSchedulePair): Ditto.
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault): Added iOS-specific code.
        * page/mac/WebCoreFrameView.h:

2013-12-27  Gavin Barraclough  <barraclough@apple.com>

        Merge PageVisibilityState & ViewState::IsVisible in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126214

        Reviewed by Alexey Proskuryakov.

        WebKit2 redundantly tracks the visibility of the view through two mechanisms - the visibility
        state, and the view state. Remove visibility state from the WebKit2 layer. The visibility
        state also tracks the prerender state - so split this out and handle it separately (a change
        we should make in WebCore, too).

        WebCore - changes the API tests exposed a bug, a view should only ever come out of the
        prerender state when it becomes visible - redundant notifications that the view is still
        hidden should be ignored.

        * page/Page.cpp:
        (WebCore::Page::setVisibilityState):
            - ignore visibility state change to hidden, if the current state is prerender.

2013-12-27  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r160946.

        Add another file to the Windows InspectorAllInOne.cpp.

        * inspector/InspectorAllInOne.cpp:

2013-12-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161096.
        http://trac.webkit.org/changeset/161096
        https://bugs.webkit.org/show_bug.cgi?id=126256

        Made lots of tests crash (Requested by ap on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        (WebCore::Document::updateRangesAfterChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        (WebCore::Document::documentWillSuspendForPageCache):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::mediaVolumeDidChange):
        (WebCore::Document::privateBrowsingStateDidChange):
        (WebCore::Document::captionPreferencesChanged):
        (WebCore::Document::validateAutoSizingNodes):
        (WebCore::Document::resetAutoSizingNodes):
        (WebCore::Document::webkitExitFullscreen):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::getObservedNodes):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::collectMatchingObserversForMutation):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::closeMessagePorts):
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        (WebCore::ScriptExecutionContext::didChangeTimerAlignmentInterval):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):

2013-12-26  Sam Weinig  <sam@webkit.org>

        Convert some of WebCore/dom over to range-for loops
        https://bugs.webkit.org/show_bug.cgi?id=126250

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/Node.cpp:
        * dom/NodeRareData.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-12-26  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Cleanup Source/WebCore/PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=126226

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:

2013-12-26  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed attempt at Windows build fix.

        I think Window's "AllInOne.cpp" is causing a using namespace JSC
        to cause naming conflicts between Inspector::TypeBuilder::Debugger::types
        and JSC::types. So removing the ambiguity.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):

2013-12-22  Andreas Kling  <akling@apple.com>

        Make Text::createTextRenderer() take a const RenderStyle&.
        <https://webkit.org/b/126136>

        Nuke a FIXME about constifying a RenderStyle& local.

        Reviewed by Anders Carlsson.

2013-12-22  Andreas Kling  <akling@apple.com>

        Move more inlines from RenderObject to RenderElement.
        <https://webkit.org/b/126134>

        Lift some inline functions that use style() from RenderObject over
        to RenderElement, making them branchless.

        Reviewed by Anders Carlsson.

2013-12-26  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r159526.
        isBoxValue is used at out of ENABLE_CSS_SHAPES gaurd. It causes a compile failure.
        So I moved isBoxValue to out side of ENABLE_CSS_SHAPES.

        * css/CSSParser.cpp:

2013-12-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_pos as private in InlineIterator, and use getter and setter functions.
        https://bugs.webkit.org/show_bug.cgi?id=125614

        Reviewed by Alexey Proskuryakov.

        InlineIterator has been exported m_pos as public directly though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setOffset):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2013-12-25  Kim Byung Jun  <bj1987.kim@samsung.com>

        [EFL] Delete file.edc and file_*.png.
        https://bugs.webkit.org/show_bug.cgi?id=125134

        Reviewed by Gyuyoung Kim.

        File_theme uses button form.

        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/DefaultTheme/widget/file/file.edc: Removed.
        * platform/efl/DefaultTheme/widget/file/file_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_press.png: Removed.

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding createDragImageIconForCachedImageFilename method to DragImageNix
        https://bugs.webkit.org/show_bug.cgi?id=126230

        Reviewed by Daniel Bates.

        Also returning nullptr in other functions that were returning 0 as a pointer.

        * platform/nix/DragImageNix.cpp:
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        (WebCore::createDragImageIconForCachedImageFilename):

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Fixing DragData::asFragment signature in DragDataNix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126229

        Reviewed by Daniel Bates.

        * platform/nix/DragDataNix.cpp:
        (WebCore::DragData::asFragment):

2013-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161033 and r161074.
        http://trac.webkit.org/changeset/161033
        http://trac.webkit.org/changeset/161074
        https://bugs.webkit.org/show_bug.cgi?id=126240

        Oliver says that a rollout would be better (Requested by ap on
        #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-25  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Implement version changing
        https://bugs.webkit.org/show_bug.cgi?id=126099

        Reviewed by Sam Weinig.

        No new tests (No change in WebCore behavior).

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit): Update some logging.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Move some things that used to be in
          IDBServerConnectionLevelDB::changeDatabaseVersion to this cross-platform location.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::transaction):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Move the actual updating of the database backend
          metadata to the VersionChangeOperation.

2013-12-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up generated sources directories
        https://bugs.webkit.org/show_bug.cgi?id=126216

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Use the new directory variables.

2013-12-25  Dirk Schulze  <krit@webkit.org>

        Support <box> values parsing on 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126147

        Reviewed by Ryosuke Niwa.

        Support parsing of the background reference boxes, margin-box and bounding-box.
        A box will be a reference box and define the origin for a basic shape.
        If no basic shape is specified, the box defines the clipping path itself.
        The specification text follows the changes to CSS Shapes now.

        https://dvcs.w3.org/hg/FXTF/raw-file/3f213145303e/css-masking-1/index.html#the-clip-path

        Existing parsing test have been extended to test box values as well.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipPath):
        * css/CSSParser.h:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):

2013-12-25  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebCore/pdf changes
        http://webkit.org/b/126097

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added files to project.
        * pdf/ios/PDFDocument.cpp: Added.
        (WebCore::PDFDocumentParser::create):
        (WebCore::PDFDocumentParser::document):
        (WebCore::PDFDocumentParser::PDFDocumentParser):
        (WebCore::PDFDocument::createParser):
        * pdf/ios/PDFDocument.h: Added.
        (WebCore::PDFDocument::create):
        (WebCore::PDFDocument::PDFDocument):

2013-12-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160959.
        http://trac.webkit.org/changeset/160959
        https://bugs.webkit.org/show_bug.cgi?id=126222

        Caused Windows build to fail (Requested by rfong on #webkit).

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r161051.
        http://trac.webkit.org/changeset/161051
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Caused two DFG tests to hit assertions due to a separate bug

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-24  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash while repainting an invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126152

        Reviewed by Daniel Bates.

        An invalid region, part of a dependency cycle, should not attempt to repaint content from
        its associated named flow, otherwise there may be the case of an infinite repaint cycle,
        resulting in a crash due to a stack overflow.

        Test: fast/regions/repaint/invalid-region-repaint-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintIncludingDescendants):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        XMLHttpRequest: status and statusText throw DOM Exception 11 when the state is UNSENT or OPENED.
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Reviewed by Alexey Proskuryakov.

        Merged https://chromium.googlesource.com/chromium/blink/+/23c90460de16e04c5aba7ed942fba76cb79fdb9b.

        Latest XHR spec says that XHR should return 0 and an empty string when it's in UNSENT or OPENED state
        or error flag is set: http://www.w3.org/TR/2012/WD-XMLHttpRequest-20121206/#the-status-attribute

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in ReplaceSelectionCommand
        https://bugs.webkit.org/show_bug.cgi?id=126107

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/c1ebe5c1e808daf9db5e348a8d0ab32570b9f7a5
        except the test since it doesn't reproduce the crash in WebKit.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo classes link and any-link to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126196

        Reviewed by Ryosuke Niwa.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLink):
        * dom/Node.h:
        (WebCore::Node::flagIsElement):
        (WebCore::Node::flagIsLink):
        Fix the type to match TrustedImm32.

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the experimental CSS code generator files to the remaining build systems
        https://bugs.webkit.org/show_bug.cgi?id=126192

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo class :focus to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126189

        Reviewed by Ryosuke Niwa.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFocused):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Remove boolean argument from Element::setChildrenAffectBy* methods
        https://bugs.webkit.org/show_bug.cgi?id=126183

        Reviewed by Daniel Bates.

        Merge https://chromium.googlesource.com/chromium/blink/+/066ef2fa78336b2b65052cb17cb81b367fe7dbbf

        These functions are never called with false.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByActive):
        (WebCore::Element::setChildrenAffectedByDrag):
        * dom/Element.h:
        (WebCore::Element::setChildrenAffectedByHover):

2013-12-23  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r161013 and r160672.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::updateCustomAppearance):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by msaboff.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add class matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126176

        Reviewed by Antti Koivisto.

        Add selector matching based on classname to the Selector Compiler.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasClasses):
        * dom/ElementData.h:
        (WebCore::ElementData::classNamesMemoryOffset):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitStringData::sizeMemoryOffset):
        (WebCore::SpaceSplitStringData::tokensMemoryOffset):

2013-12-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/storage changes
        https://bugs.webkit.org/show_bug.cgi?id=125913

        Reviewed by David Kilzer.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::openDatabase): Added iOS-specific code.
        (WebCore::StorageAreaSync::sync): Ditto.
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::openTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncImportOriginIdentifiers): Ditto.
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncSetOriginDetails): Ditto.
        (WebCore::StorageTracker::syncDeleteAllOrigins): Ditto.
        (WebCore::StorageTracker::syncDeleteOrigin): Ditto.
        (WebCore::StorageTracker::databasePathForOrigin): Ditto.

2013-12-23  Daniel Bates  <dabates@apple.com>

        Fix the iOS build following <http://trac.webkit.org/changeset/160236>
        (https://bugs.webkit.org/show_bug.cgi?id=125239)

        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Substitute view() for &view().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Fix indentation of closing brace.
        * rendering/RenderLayerCompositor.cpp: Include MainFrame.h.
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Check that page->mainFrame().view()
        is non-null; also add explicit #else clause.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Fix up main frame check.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Substitute rect for r.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations): Use .get() to access underlying NeverDestroyed item.
        (WebCore::RenderThemeIOS::systemFont):
        * rendering/RenderView.cpp:
        (WebCore::fixedPositionOffset): Substitute frameView.scrollOffset() for frameView->scrollOffset().

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Minor optimization in FrameSelection::setNonDirectionalSelectionIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=126108

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/237b987c324e2e389a9e0350293bfaf16a5e201d

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNonDirectionalSelectionIfNeeded):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Use isDocumentFragment() instead of comparing nodeType() with Node::DOCUMENT_FRAGMENT_NODE
        https://bugs.webkit.org/show_bug.cgi?id=126178

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/a622cb80af2bfb0c5d91123cbcfa4fa72a06554c

        Use inline Node::isDocumentFragment() instead of virtual nodeType().

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent):
        * dom/Document.cpp:
        (WebCore::Document::canReplaceChild):

2013-12-23  Gwang Yoon Hwang  <ryumiel@company100.net>

        Clear ScratchBuffer::m_lastLayerSize when clearing the scratch buffer.
        https://bugs.webkit.org/show_bug.cgi?id=126150

        Reviewed by Simon Fraser.

        Since ScratchBuffer::clearScratchBuffer only clears m_lastRadius,
        ShadowBlur doesn't draw shadow into the re-created scratch buffer if it
        tries to draw shadow without blurRadius.

        Clear m_lastLayerSize to empty is enought to ensure that there is no
        drawn contents in the scratch buffer.

        No new tests due to the flaky nature of reproducing the issue.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::clearScratchBuffer):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add id matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126154

        Reviewed by Antti Koivisto.

        Compile matching for #id selectors. IDs are Atomic String so it is just a matter
        of comparing the pointers.

        No attempt is made at optimizing for the double #id case because such problem
        do not really happen outside tests.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasId):
        * dom/Element.h:
        (WebCore::Element::elementDataMemoryOffset):
        * dom/ElementData.h:
        (WebCore::ElementData::idForStyleResolutionMemoryOffset):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Update custom setter implementations to perform type checks
        https://bugs.webkit.org/show_bug.cgi?id=126171

        Reviewed by Daniel Bates.

        Update the bindings code generator for setters so that they perform a real
        type check.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjReplaceableAttribute):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2013-12-23  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/15682948> Update copyright strings

        Reviewed by Dan Bernstein

        * Info.plist:

2013-12-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160945.
        http://trac.webkit.org/changeset/160945
        https://bugs.webkit.org/show_bug.cgi?id=126164

        Seems to have broken multiple canvas tests (Requested by ap on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Removed.
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Removed.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-23  Eric Carlson  <eric.carlson@apple.com>

        AudioSessionManager should be MediaSessionManager
        https://bugs.webkit.org/show_bug.cgi?id=126087

        Reviewed by Jer Noble.

        No new tests, no change in functionality.

        * WebCore.xcodeproj/project.pbxproj: Change file names.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): MediaSessionManagerToken::create() takes a client
            interface instead of the media type.
        * html/HTMLMediaElement.h:

        * platform/audio/AudioSessionListener.h: Include <wtf/Noncopyable.h>.
        
        AudioSessionManager.* -> MediaSessionManager.*
        * platform/audio/AudioSessionManager.cpp: Removed.
        * platform/audio/AudioSessionManager.h: Removed.
        * platform/audio/MediaSessionManager.cpp: Copied from Source/WebCore/platform/audio/AudioSessionManager.cpp.
        (MediaSessionManagerToken::create):
        (MediaSessionManagerToken::MediaSessionManagerToken):
        (MediaSessionManagerToken::~MediaSessionManagerToken):
        (MediaSessionManager::sharedManager):
        (MediaSessionManager::MediaSessionManager):
        (MediaSessionManager::has):
        (MediaSessionManager::count):
        (MediaSessionManager::addToken):
        (MediaSessionManager::removeToken):
        (MediaSessionManager::updateSessionState):
        * platform/audio/MediaSessionManager.h: Copied from Source/WebCore/platform/audio/AudioSessionManager.h.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken::create() takes a
            client interface instead of the media type.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/AudioSessionManagerMac.cpp: Removed.
        * platform/audio/mac/MediaSessionManagerMac.cpp: Copied from Source/WebCore/platform/audio/mac/AudioSessionManagerMac.cpp.
        (MediaSessionManager::updateSessionState):

2013-12-23  Zan Dobersek  <zdobersek@igalia.com>

        webkit gtk 2.2.3 stable tarball compilation error
        https://bugs.webkit.org/show_bug.cgi?id=125987

        Reviewed by Gustavo Noronha Silva.

        Only try including <gdk/gdkwayland.h> and using GDK_IS_WAYLAND_DISPLAY if the Wayland support has been
        enabled and when not compiling with GTK+ 2 (which occurs when building for libPlatformGtk2).

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):

2013-12-23  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] video/audio seeking is not unified.
        https://bugs.webkit.org/show_bug.cgi?id=125852

        Reviewed by Philippe Normand.

        This bug is fixing regression with seeking audio/video elements and unifies seeking
        in MediaPlayerPrivateGStreamer.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::seekIncludingRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2013-12-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][WK2] WebGL is not working with GLES
        https://bugs.webkit.org/show_bug.cgi?id=126138

        Reviewed by Martin Robinson.

        m_texture has been unnecessarily regenerated. It's generated in GraphicsContext3D
        constructor for offscreen rendering. And m_compositorTexture is used by only Mac port.
        They create it in their GraphicsContext3D constructor so that we don't need to recreate it
        in GC3DOpenGLES::reshapeFBOs.

        No new tests since no functionality changed.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):

2013-12-22  Benjamin Poulain  <bpoulain@apple.com>

        Create a skeleton for CSS Selector code generation
        https://bugs.webkit.org/show_bug.cgi?id=126044

        Reviewed by Antti Koivisto and Gavin Barraclough.

        Add CSSCompiler, which provides the basic infrastructure to compile
        CSS Selectors on x86_64.

        Compilation happens in two phases.
        1) The various matching and relation of each CSSSelector is aggregated into units
           matching a single element: SelectorFragment.
           SelectorFragment also knows about the relations between different fragments,
           and contains all the information to generate the code for a particular element.
        2) The compiler then goes over the fragments, and generate code based on the information
           of each fragment.

        It the current state, SelectorCompiler only compiles the tag matching selectors and
        any of the relation between selectors.

        Depending on the relation and position of a fragment, failure on traversal or matching
        does not necessarily causes the complete selector. A failure can cause matching to
        resume from the parent or the sibling of a previously visisted node.
        The implementation of this is done through the BacktrackingAction. In case of failure,
        the next starting state is setup and the program counter jumps back to the appropriate
        starting point.

        When backtracking, the method used to save the starting point depends on the type
        of backtracking.
        The child/parent relation (">") is very common so it uses an additional register to keep
        the next starting point (m_descendantBacktrackingStart).
        The indirect sibling relation ("~") is much less common and uses the stack to save
        the next starting point.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/SelectorCompiler.cpp: Added.
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::updateChainStates):
        (WebCore::SelectorCompiler::isFirstAncestor):
        (WebCore::SelectorCompiler::isFirstAdjacent):
        (WebCore::SelectorCompiler::isAfterChildRelation):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::requiresAdjacentTail):
        (WebCore::SelectorCompiler::requiresDescendantTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::testIsElementFlagOnNode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAncestorTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateBacktrackingTailsIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        * cssjit/SelectorCompiler.h: Added.
        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus):
        (WebCore::SelectorCompilationStatus::operator Status):
        (WebCore::SelectorCompiler::simpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::selectorCheckerFunctionWithCheckingContext):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Element.h:
        (WebCore::Element::tagQNameMemoryOffset):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Node.h:
        (WebCore::Node::parentNodeMemoryOffset):
        (WebCore::Node::previousSiblingMemoryOffset):
        (WebCore::Node::nodeFlagsMemoryOffset):
        (WebCore::Node::flagIsElement):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::localNameMemoryOffset):
        (WebCore::QualifiedName::QualifiedNameImpl::namespaceMemoryOffset):
        (WebCore::QualifiedName::implMemoryOffset):

2013-12-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash when trying to select content from invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126113

        Reviewed by Antti Koivisto.

        After fix for https://bugs.webkit.org/show_bug.cgi?id=120769, positionForPoint for a region attempts to use the associated named flow to perform its task.
        However, this should happen only when the region is valid. If the region is invalid, part of a dependency cycle, positionForPoint should behave as usual
        for a block instead of a region, otherwise it may run into an infinite loop due to cyclic dependencies and a crash will occur.

        This patch ensures that positionForPoint region specifie behaviour is followed only if the region is valid - not part of a dependency cycle.

        Test: fast/regions/selection/invalid-region-selection-crash.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):

2013-12-21  Dirk Schulze  <krit@webkit.org>

        Start refactoring Filter code to reuse CachedSVGDocument for clipPath
        https://bugs.webkit.org/show_bug.cgi?id=126069

        Reviewed by Andreas Kling.

        Smaller refactoring of the CSS filter style resolver code. Previously the code
        requested the FilterOperations list from RenderStyle and compared the content
        in this list with an internal map. Then the resource loading was triggered.
        With the refactoring we do not request the list from RenderStyle anymore but
        rely on the hash map data entirely.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        * platform/graphics/filters/FilterOperation.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        [Mac] Soft-link WebContentAnalysis.framework
        https://bugs.webkit.org/show_bug.cgi?id=126102

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig: There's no need to modify LDFLAGS
        now that we don't hard link against WebContentAnalysis.framework.
        * WebCore.xcodeproj/project.pbxproj: Removed
        WebContentAnalysis.framework from the 'Link Binary with Libraries'
        build phase.
        * platform/mac/ContentFilterMac.mm: Soft-linked
        WebContentAnalysis.framework and the WebFilterEvaluator @class.
        (WebCore::ContentFilter::ContentFilter): Called getWebFilterEvaluatorClass().
        (WebCore::ContentFilter::isEnabled): Ditto.
        * platform/mac/SoftLinking.h: Added an implementation of
        SOFT_LINK_PRIVATE_FRAMEWORK().

2013-12-21  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r160916.
        http://trac.webkit.org/changeset/160916
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Roll out a temporary fix. The underlying issue was fixed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-21  Antti Koivisto  <antti@apple.com>

        Figure out if node is focusable without requiring renderer
        https://bugs.webkit.org/show_bug.cgi?id=126118

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):
        
            Use inDocument() test instead of the attached() test. We can compute style for anything that
            is in document.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::isContentRichlyEditable):
        (WebCore::Node::hasEditableStyle):
        
            Use computedStyle instead of getting the style from renderer. Computed style gets constructed
            on demand if renderer does not exist. If it does then the existing style is used.

        (WebCore::Node::isEditableToAccessibility):
        (WebCore::Node::canStartSelection):
        (WebCore::Node::isRootEditableElement):
        (WebCore::Node::rootEditableElement):
        * dom/Node.h:
        (WebCore::Node::hasEditableStyle):
        (WebCore::Node::hasRichlyEditableStyle):
        
            Renamed from rendererIsEditable since these no longer require renderer.

        (WebCore::HTMLElement::supportsFocus):
        
            Stop calling updateStyleIfNeeded() and forcing render tree construction.

2013-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceHandleSoup should use async client callbacks when client uses async callbacks
        https://bugs.webkit.org/show_bug.cgi?id=126006

        Reviewed by Martin Robinson.

        This fixes WebKit2 loader client unit tests when using the network
        process.

        * platform/network/ResourceHandle.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Call willSendRequestAsync on the client
        when usesAsyncCallbacks returns true.
        (WebCore::nextMultipartResponsePartCallback): Call
        didReceiveResponseAsync on the client when usesAsyncCallbacks
        returns true.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::ResourceHandle::continueWillSendRequest): Empty
        implementation for now because the default one asserts.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Ditto.
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage): Ditto.

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that RootInlineBox::setLineBreakInfo should is never called on a RenderInline without line boxes
        https://bugs.webkit.org/show_bug.cgi?id=126101

        Reviewed by Simon Fraser.

        Merge assertions added in https://chromium.googlesource.com/chromium/blink/+/716ac74fd475b581d69c0aa8ec2d806201c3a420

        The code change was not merged since we never hit the added assertion on the attached test case in WebKit.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::setLineBreakInfo):

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove the references to Node in InjectedScript
        https://bugs.webkit.org/show_bug.cgi?id=126091

        Reviewed by Timothy Hatcher.

        Remove the last DOM references from InjectedScript so that
        InjectedScript can move down into JavaScriptCore. The only
        remaining references were to Nodes, which are all just thin
        wrappers around existing functions. Move Node / JSNode (JSValue)
        conversion into InspectorDOMAgent, where it was used.

        No new tests, no observable change in functionality.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::inspectObject):
        (WebCore::InjectedScript::releaseObject):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::requestNode):
        (WebCore::InspectorDOMAgent::nodeForObjectId):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        (WebCore::InspectorDOMAgent::nodeAsScriptValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/PageConsoleAgent.cpp:

2013-12-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Faster implementation of text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=125718

        Reviewed by Simon Fraser.

        This new implementation of text-decoration-skip: ink extracts
        each glyph into a path, then decomposes each path into a series
        of contours. It then intersects each contour with the top and
        bottom of the underline (by approximating the contour with a line).
        It then draws underlines in between these intersection regions.

        Tests for text-decoration-skip: ink already exist in
        fast/css3-text/css3-text-decoration/text-decoration-skip

        * platform/graphics/Font.h: Signature of new function
        * platform/graphics/mac/FontMac.mm:
        (WebCore::GlyphIterationState::GlyphIterationState): Persistent
        between calls to findPathIntersections
        (WebCore::findIntersectionPoint): Calculates an intersection point
        between two lines
        (WebCore::findPathIntersections): Called by CGPathApply to find
        intersections of each contour
        (WebCore::Font::intersectionPoints): Function to get the places
        where an underline would intersect a TextRun.
        * rendering/InlineTextBox.cpp:
        (WebCore::compareTuples): Used for sorting intersection ranges
        (WebCore::translateIntersectionPointsToSkipInkBoundaries): Converts
        a sequence of intersection points to the locations where
        text-decoration-skip: ink should draw underlines
        (WebCore::drawSkipInkUnderline): Draws a sequence of short underlines
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::intersectionPoints): Calls Font::intersectionPoints
        * rendering/TextPainter.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give the CommandLineAPIModule its own Host object, making InjectedScriptHost viable for a JS Context
        https://bugs.webkit.org/show_bug.cgi?id=126082

        Reviewed by Timothy Hatcher.

        Extract CommandLineAPIHost from InjectedScriptHost. The command line API contained
        a bunch of DOM specific JavaScript that would not be suitable for a pure JavaScript
        environment. Now that the DOM related code is in this WebCore only module, give this
        module a host object that WebCore will provide.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files.

        * bindings/js/JSCommandLineAPIHostCustom.cpp: Added.
        (WebCore::JSCommandLineAPIHost::inspectedObject):
        (WebCore::getJSListenerFunctions):
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::inspect):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/CommandLineAPIHost.cpp: Copied from Source/WebCore/inspector/InjectedScriptHost.cpp.
        (WebCore::CommandLineAPIHost::create):
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::~CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::inspectImpl):
        (WebCore::CommandLineAPIHost::getEventListenersImpl):
        (WebCore::CommandLineAPIHost::clearConsoleMessages):
        (WebCore::CommandLineAPIHost::copyText):
        (WebCore::CommandLineAPIHost::InspectableObject::get):
        (WebCore::CommandLineAPIHost::addInspectedObject):
        (WebCore::CommandLineAPIHost::clearInspectedObjects):
        (WebCore::CommandLineAPIHost::inspectedObject):
        (WebCore::CommandLineAPIHost::databaseIdImpl):
        (WebCore::CommandLineAPIHost::storageIdImpl):
        * inspector/CommandLineAPIHost.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.idl: Copied from Source/WebCore/inspector/InjectedScriptHost.idl.
        * inspector/CommandLineAPIModule.cpp:
        These are almost all pure copies from InjectedScriptHost files. Cleaned up a bit.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Modules can now define a host object when they are getting injected.

        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        Provide a CommandLineAPIHost, host object.

        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::host):
        No host object is needed for the CanvasModule.

        * inspector/InjectedScriptSource.js:
        * inspector/CommandLineAPIModuleSource.js:
        When injecting a module, pass on an optional host object to
        the module's source. Move a little more code between the
        two files. The two files are very tightly coupled right now.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        Move any command line specific logic to CommandLineAPIHost classes.

        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::disconnect):
        * inspector/InjectedScriptManager.h:
        (WebCore::InjectedScriptManager::commandLineAPIHost):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addInspectedHeapObject):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::resetState):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::disconnect):
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        An InjectedScriptManager may optionally have a commandLineAPIHost object.
        If it does, initialize it, and send it messages.

2013-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test adds a static class, ImageBufferBackingStoreCache, that vends
        IOSurfaces. It remembers IOSurfaces that have been returned to it until
        a configurable timeout.

        The storage used by this class is in the form of a HashMap from a
        bucketed size to the IOSurface. There are many other data structures
        that could be used, but this implementation gives a 80% hit rate on
        normal browsing of some example sites with Canvas and
        text-decoration-skip: ink. Because the buckets are fairly
        small (rounding the width and height up to multiples of 8), traversing the
        bucket contents takes on average 2 steps. 

        Test: fast/canvas/canvas-backing-store-reuse.html

        * WebCore.xcodeproj/project.pbxproj: Added new caching class
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added.
        (WebCore::createIOSurface): Moved from ImageBufferCG.cpp
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache
        contents
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        (WebCore::ImageBufferBackingStoreCache::get): Static getter
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management
        creation function
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management
        deletion function
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached
        IOSurface fit the bill?
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup
        a bucket and walk through its contents
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function
        for clients who want a IOSurface from the cache
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public
        function for clients to return an IOSurface to the pool
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp: Update to use new cache
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-20  Simon Fraser  <simon.fraser@apple.com>

        Change "threaded scrolling" terminology to "asynchronous scrolling"
        https://bugs.webkit.org/show_bug.cgi?id=126094

        Reviewed by Tim Horton.

        Rename ENABLE_THREADED_SCROLLING to ENABLE_ASYNC_SCROLLING, and change
        references to "main thread scrolling" to "synchronous scrolling".
        
        In a few places, functions with names like shouldUpdateScrollLayerPositionOnMainThread()
        were actually returning SynchronousScrollingReasons, so rename them appropriately.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::isRubberBandInProgress):
        (WebCore::FrameView::requestScrollPositionUpdate):
        (WebCore::FrameView::updatesScrollLayerPositionOnMainThread):
        (WebCore::FrameView::wheelEvent):
        * page/Page.cpp:
        (WebCore::Page::synchronousScrollingReasonsAsText):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewFixedObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h: Awkward "ReasonsForSynchronousScrolling" to avoid
        conflict with the enum called SynchronousScrollingReasons.
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingThread.cpp:
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons):
        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::setSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::logThreadedScrollingMode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::updateTileCoverageMap):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * testing/Internals.cpp:
        (WebCore::Internals::mainThreadScrollingReasons):
        * testing/Internals.idl:

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        Revert r160327, r160273, and r160260.

        We'll come up with something less aggressive, as this doesn't quite work.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        PostAttachCallbackDisabler should take a Document
        https://bugs.webkit.org/show_bug.cgi?id=126090

        Reviewed by Andreas Kling.

        suspendPostAttachCallbacks and resumePostAttachCallbacks always only get the document from the
        container node, so make them static member functions that take a Document&. Also, move PostAttachCallbackDisabler
        to Element.h in preparation for moving post attach callback handling to Element.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * dom/ContainerNode.h:
        * dom/Element.h:
        (WebCore::PostAttachCallbackDisabler::PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::~PostAttachCallbackDisabler):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Move scheduleSetNeedsStyleRecalc to HTMLFrameOwnerElement
        https://bugs.webkit.org/show_bug.cgi?id=126083

        Reviewed by Antti Koivisto.

        scheduleSetNeedsStyleRecalc is only ever called on HTMLFrameOwnerElement, so
        move it there, remove the Node implementation and make it non-virtual.

        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Node.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::needsStyleRecalcCallback):
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc):
        * html/HTMLFrameOwnerElement.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        Remove an unneeded include of WebCoreSystemInterface.h.

        Rubber-stamped by Dan Bernstein.

        * platform/mac/ContentFilterMac.mm:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Node post attach callbacks should use references
        https://bugs.webkit.org/show_bug.cgi?id=126081

        Reviewed by Antti Koivisto.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::queuePostAttachCallback):
        (WebCore::ContainerNode::dispatchPostAttachCallbacks):
        (WebCore::needsStyleRecalcCallback):
        (WebCore::ContainerNode::scheduleSetNeedsStyleRecalc):
        * dom/ContainerNode.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::focusPostAttach):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::updateFromElementCallback):
        (WebCore::HTMLFormControlElement::didRecalcStyle):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        Only inject the CommandLineAPIModule once, when the InjectedScript
        is first created. This avoids running a small snippet of JavaScript
        to check if the module is loaded every time we fetch the InjectedScript.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new files to the build.

        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createForPage):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::didCreateInjectedScript):
        Add didCreateInjectedScript hook for a subclass to inject more scripts.

        * inspector/PageInjectedScriptManager.h: Added.
        * inspector/PageInjectedScriptManager.cpp: Added.
        (WebCore::PageInjectedScriptManager::didCreateInjectedScript):
        For pages, inject the CommandLineAPIModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        This is replaced by PageInjectedScriptManager, we no longer need
        to do extra work every time we fetch the injectedScriptForEval.

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        No tests, no observable change in behavior.

        Move the CommandLineAPI source into its own module. Load the module
        in InjectedScripts for WebCore::Pages. Not for workers.

        Moving CommandLineAPI into it's own module moves it from being inside
        the same anonymous function to being evaluated outside the anonymous
        function. To connect the two InjectedScript passes itself to the
        injected module, and the CommandLineAPI module places its class on the
        injectedScript as injectedScript.CommandLineAPI.

        This essentially makes the CommandLineAPI module an InjectedScript
        extension. InjectedScriptSource checks for the existence of
        this.CommandLineAPI to see if the fuller version is available. Otherwise
        it falls back to a BasicCommandLineAPI which only exposes "$_",
        which is the "last evaluated result". That will be useful for JS Contexts
        and Workers.

        At the same time, this patch makes InjectedScriptModule more generic,
        to support being used in a pure JavaScript environment, meaning one
        without "window" as the global object.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add files. Minify the CommandLineAPIModuleSource in generation.

        * inspector/CommandLineAPIModule.h: Added.
        * inspector/CommandLineAPIModule.cpp: Added.
        (WebCore::CommandLineAPIModule::CommandLineAPIModule):
        (WebCore::CommandLineAPIModule::injectIfNeeded):
        (WebCore::CommandLineAPIModule::source):
        Inject the module that doesn't return an object, its just evaluated code
        extending the original InjectedScript.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Only ASSERT the result was an object if the Module claims it returns an object.

        * inspector/InjectedScriptCanvasModule.h:
        (WebCore::InjectedScriptCanvasModule::returnsObject):
        Return an object used later to call into the CanvasModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        Ensure the CommandLineAPIModule is loaded in the Page's InjectedScript.

        * inspector/CommandLineAPIModuleSource.js: Added.
        Create the CommandLineAPI class and place it on injectedScript.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn):
        Inject either the BasicCommandLineAPI or extended CommandLineAPI.
        Derive the globalObject dynamically instead of assuming window.
        Inject the commandLineAPI on window.console or the globalObject based on context.
        Audit and rename uses of "window" to something like globalObject.

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Implement smartMagnifyWithEvent: and make it work
        https://bugs.webkit.org/show_bug.cgi?id=125752
        <rdar://problem/15664245>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Add some exports.

2013-12-20  Antti Koivisto  <antti@apple.com>

        http/tests/misc/object-image-error.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=126074

        Reviewed by Andreas Kling.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:
        
            Start image load from post-attach so we don't re-enter attach when image load fails synchronously.

2013-12-20  Antti Koivisto  <antti@apple.com>

        Crashes in AccessibilityRenderObject::computeAccessibilityIsIgnored()
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Reviewed by Ryosuke Niwa.

        Prevent the crash and try to catch in debug why it is happening.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-20  Antti Koivisto  <antti@apple.com>

        Fix asserting accesibility tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus): Accessibility code checks focus status during painting.

2013-12-20  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r160909.
        Remove remaining uses of AttachLazily in code specific to the GTK port.

        * html/shadow/MediaControlsGtk.cpp:
        (WebCore::MediaControlsGtk::initializeControls):
        (WebCore::MediaControlsGtk::createTextTrackDisplay):

2013-12-19  Antti Koivisto  <antti@apple.com>

        Create render tree lazily
        https://bugs.webkit.org/show_bug.cgi?id=120685

        Reviewed by Andreas Kling.

        We currently recompute style and construct renderer for each DOM node immediately after they are added to 
        the tree. This is often inefficient as the style may change immediately afterwards and the work needs to be
        redone. 
        
        With this patch we always compute style and construct render tree lazily, either on style recalc timer or
        synchronously when they are needed. It also removes the 'attached' bit. If document has render tree then
        all nodes are conceptually "attached" even if this happens lazily.
        
        The patch slightly changes behavior of implicit CSS transitions. A synchronous style change during parsing
        may not trigger the animation anymore as laziness means we don't see anything changing. This matches Firefox
        and Chrome in our test cases.
        
        * WebCore.exp.in:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::appendChild):
        
            All attaching is now lazy, remove AttachLazily.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        
            SVG renderers with !isValid() have empty display property value for some reason. Keep the behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAppendChild):
        (WebCore::ContainerNode::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::destroyRenderTree):
        
            Remove attach bit maintenance.

        (WebCore::Document::webkitDidExitFullScreenForElement):
        
            Do lazy render tree reconstruction after returning from full screen. That is the only reliable way
            to get the render tree back to decent shape.

        * dom/Element.cpp:
        (WebCore::Element::isFocusable):
        
            Remove pointless !renderer()->needsLayout() assert.

        (WebCore::Element::addShadowRoot):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::resetComputedStyle):
        
            Take care to reset computed style in all descendants. attachRenderTree no longer does this.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertBefore):
        (WebCore::Node::replaceChild):
        (WebCore::Node::appendChild):
        (WebCore::Node::setNeedsStyleRecalc):
        
            Propagate ReconstructRenderTree.

        (WebCore::Node::attached):
        
            Emulate the behavior of old attached bit for now so existing code calling this mostly stays working.

        * dom/Node.h:
        
            Add new ReconstructRenderTree value for StyleChangeType.

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        (WebCore::Range::intersectsNode):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::canRebalance):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        
            TextControlInnerTextElement always preserves newline even if it doesn't have style yet.

        (WebCore::HTMLElement::supportsFocus):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        
            Don't autofocus until we have renderer.

        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        
            Lazy render tree construction.

        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTask):
        
            Don't attach renderer after construction.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::invalidateDistribution):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::willAttachRenderers):
        (WebCore::InsertionPoint::willDetachRenderers):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getDisplayTree):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::detachTextRenderer):
        
            Remove attached bit maintenance.

        (WebCore::Style::attachChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachShadowRoot):
        (WebCore::Style::detachRenderTree):
        (WebCore::Style::resolveLocal):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::handleAttributeChange):
        
            Make lazy.

        * testing/Internals.cpp:
        (WebCore::Internals::attached):
        (WebCore::Internals::elementRenderTreeAsText):
        (WebCore::Internals::markerAt):
        (WebCore::Internals::nodesFromRect):

2013-12-20  Andreas Kling  <akling@apple.com>

        Devirtualize RenderElement::setStyle().
        <https://webkit.org/b/126065>

        setStyle() was only virtual in order to let RenderSVGBlock override
        the display type in some cases. Devirtualized it and moved the fixup
        logic to StyleResolver::adjustRenderStyle().

        This hack had an evil twin in RenderElement::initializeStyle() that
        also goes away. FIXME--!

        Based on a Blink change by Elliott Sprehn.

        Reviewed by Antti Koivisto.

2013-12-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] When changing flow-from/flow-into on :hover, elements overflowing the region are not correctly repainted
        https://bugs.webkit.org/show_bug.cgi?id=117259

        Reviewed by Antti Koivisto.

        When computing the repaint rect for a region, the existing visual overflow must be taken into consideration.
        For this purpose, I overridden the visualOverflowRect method in RenderNamedFlowFragment, which ends up being
        called from RenderBox::clippedOverflowRectForRepaint. 

        Test: fast/regions/hover-single-flow-from-none-overflow.html
              fast/regions/hover-single-flow-from-none-overflow-top.html

        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::visualOverflowRect):
        * rendering/RenderNamedFlowFragment.h:

2013-12-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::children): Add the option ot
        request the AccessibilityChildrenVector without updating it if
        needed, to avoid maybe recreating the child subtree when trying to
        get the offset of a newly attached element from attachWrapper.
        * accessibility/AccessibilityObject.h:

2013-12-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Move function calls outside loop in dom
        https://bugs.webkit.org/show_bug.cgi?id=125916

        Reviewed by Csaba Osztrogonác.

        Do not call length() in each iteration.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):

2013-12-19  Beth Dakin  <bdakin@apple.com>

        REGRESSION: cnn.com will continue to reveal 1 px of overhang after rubber-banding 
        at the top
        https://bugs.webkit.org/show_bug.cgi?id=126054

        Reviewed by Simon Fraser.

        This regression was caused by http://trac.webkit.org/changeset/160791 It turns out 
        that the line of code I removed was not always a no-op. In some instances, like on 
        cnn.com, it would ensure that our final scroll position after a rubber-band was 
        not something within the overhang area. It was still wrong in its assumption that 
        rubber-band is always bouncing back the spot it originated from. So this patch 
        continues to ignore the rubber-bands origin, and instead finds the nearest point 
        that is not in the overhang area, and scrolls to that point instead of the origin.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-19  Simon Fraser  <simon.fraser@apple.com>

        Clarify the behavior of composited canvases
        https://bugs.webkit.org/show_bug.cgi?id=126042

        Reviewed by Tim Horton.

        Different platforms composite 2D and 3D canvases in different ways.
        
        "Accelerated 2D" canvases, and WebGL are always set as GraphicsLayer
        contents.
        
        "IOSurface" canvases (Mac and iOS-only) get a compositing layer, but
        paint into it (because this is fast, and a convenient way to get
        synchronization).
        
        So make these behaviors explicit in RenderLayerBacking and RenderLayerCompositor.
        No behavior changes on OS X, bug fix on iOS.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add InspectorFrontendHost.debuggableType to let the frontend know it's backend is JavaScript or Web
        https://bugs.webkit.org/show_bug.cgi?id=126016

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::debuggableType):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Expose the debuggableType to the frontend. In WebCore it is always a "web" type.

2013-12-19  Benjamin Poulain  <benjamin@webkit.org>

        Add an utility class to simplify generating function calls
        https://bugs.webkit.org/show_bug.cgi?id=125972

        Reviewed by Geoffrey Garen.

        FunctionCall is a little helper class to make function calls from the JIT
        in 3 or 4 lines.

        FunctionCall takes a StackAllocator, a RegisterAllocator and a function pointer.
        When the call is generated, the helper saves the registers as necessary, aligns
        the stack, does the call, restores the stack, and restore the registers.

        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):

        (WebCore::FunctionCall::callAndBranchOnCondition): Most test functions used
        with FunctionCall return a boolean. When the boolean is the sole purpose of the function
        call, this provides an easy way to branch on the boolean without worrying about registers.

        The return register is tested first, then all the saved registers are restored from the stack
        (which can include the return register), finally the flags are used for a jump.

        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):
        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):
        (WebCore::FunctionCall::callAndBranchOnCondition):
        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):

2013-12-19  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out the KeyedDecoder class
        https://bugs.webkit.org/show_bug.cgi?id=126031

        Reviewed by Andreas Kling.

        KeyedDecoder is going to be the new way to decode back forward trees.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::~KeyedDecoder):

2013-12-19  Oliver Hunt  <oliver@apple.com>

        DOM bindings should use thisValue for attributes
        https://bugs.webkit.org/show_bug.cgi?id=126011

        Reviewed by Antti Koivisto.

        Make all standard DOM attributes use the thisValue instead
        of the slot object.  This requires using a dynamic cast in
        the attribute getters. Happily for normal uses this a single
        indirect load and pointer compare, and we were already doing
        it for many attributes.

        Alas it's too expensive to do this on the window object still
        due to the proxy indirection that intercepts global variable
        access.  I'll correct this in a follow on patch (bug 126013).

        A number of custom getters have also been updated to use the
        thisValue and full type checks.

        This patch still leaves the index and generic named getters
        on the slot based model as fixing these cases requires more
        complicated changes.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjConstructorStaticReadOnlyLongAttr):
        (WebCore::jsTestObjConstructorStaticStringAttr):
        (WebCore::jsTestObjConstructorTestSubObj):
        (WebCore::jsTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjConditionalAttr4Constructor):
        (WebCore::jsTestObjConditionalAttr5Constructor):
        (WebCore::jsTestObjConditionalAttr6Constructor):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):

2013-12-19  Andy Estes  <aestes@apple.com>

        Remove WebFilterEvaluator wrappers from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=126028

        Reviewed by Anders Carlsson.

        It's overkill to pipe access to WebFilterEvaluator through
        WebKitSystemInterface. Instead, include WebFilterEvaluator.h when it
        exists and re-declare WebFilterEvaluator when it doesn't.
        
        WebKitSystemInterface used to soft-link WebContentAnalysis.framework
        since OS X 10.7 didn't contain this framework. Since we no longer
        support 10.7, we can now directly link against the framework.

        * Configurations/WebCore.xcconfig: Add /System/Library/PrivateHeaders
        to the system framework search path at both compile and link time so
        that we can find WebContentAnalysis.framework.
        * WebCore.exp.in: Don't export removed symbols.
        * WebCore.xcodeproj/project.pbxproj: Added WebContentAnalysis.framework
        to the 'Link Binary With Libraries' build phase.
        * platform/mac/ContentFilterMac.mm: Included WebFilterEvaluator.h when
        it exists and re-declared WebFilterEvaluator when it doesn't.
        (WebCore::ContentFilter::ContentFilter): Directly called a method on
        m_platformContentFilter rather than going through WKSI.
        (WebCore::ContentFilter::isEnabled): Ditto.
        (WebCore::ContentFilter::addData): Ditto.
        (WebCore::ContentFilter::finishedAddingData): Ditto.
        (WebCore::ContentFilter::needsMoreData): Ditto.
        (WebCore::ContentFilter::didBlockData): Ditto.
        * platform/mac/WebCoreSystemInterface.h: Removed function pointers for
        calling into WKSI.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Use CascadedProperties for page and keyframe style resolution as well.
        <https://webkit.org/b/125997>

        Port StyleResolver's styleForKeyframe() and styleForPage() over to
        the new property cascading code. Neither of them care about !important
        or matched properties caches, so the code is very simple.

        Removed the old applyMatchedProperties and applyProperties code with
        low/high priority passes.

        Reviewed by Antti Koivisto.

2013-12-19  Eric Carlson  <eric.carlson@apple.com>

        tryAddEventListener uses local PassRefPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=126001

        Reviewed by Daniel Bates.

        * dom/Node.cpp:
        (WebCore::tryAddEventListener): Put PassRefPtr<EventListener> parameter into a local RefPtr
            because it is sometimes used twice.

2013-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        overflowchanged event could cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=125978

        Reviewed by Tim Horton.

        Made the event asynchrnous by re-using Document's event queuing ability. Also removed
        the infrastructure to queue up events in FrameView.

        Test: fast/events/overflowchanged-inside-selection-collapse-crash.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::enqueueOverflowEvent):
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::OverflowEventDispatcher::~OverflowEventDispatcher):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):

2013-12-19  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <http://trac.webkit.org/changeset/160841>
        (https://bugs.webkit.org/show_bug.cgi?id=125879)

        Add ENABLE(CACHE_PARTITIONING)-guard around call to ResourceRequest::setCachePartition()
        as this function is only compiled when building with cache partitioning enabled.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/accessibility changes
        https://bugs.webkit.org/show_bug.cgi?id=125925

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint): Opt out of code when building for iOS.

2013-12-19  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Compile fix for VS2013 when using ACCELERATED_COMPOSITING.
        https://bugs.webkit.org/show_bug.cgi?id=124866

        Reviewed by Darin Adler.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        Added constructor overload to avoid compile errors
        from using MSVC's make_unique as a default parameter.

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/loader changes
        https://bugs.webkit.org/show_bug.cgi?id=125879

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added symbols for MemoryCache::{addImageToCache, removeImageFromCache}().
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable): Added.
        (WebCore::DocumentLoader::DocumentLoader): Initialize m_subresourceLoadersArePageCacheAcceptable.
        (WebCore::DocumentLoader::stopLoading): Modified to conditionally call areAllLoadersPageCacheAcceptable().
        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon): Modified to query FrameLoader::loadsSynchronously()
        whether to load substitute data immediately or to schedule a load.
        (WebCore::DocumentLoader::responseReceived): Modified to create a content filer when the response protocol
        is either HTTP or HTTPS, assuming content filtering is enabled.
        (WebCore::DocumentLoader::dataReceived): Modified to call DocumentLoader::setContentFilterForBlockedLoad()
        as appropriate.
        (WebCore::DocumentLoader::clearMainResourceLoader): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        (WebCore::DocumentLoader::setResponseMIMEType): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::DocumentLoader::startLoadingMainResource): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        I also substituted static NeverDestroyed<> for DEFINE_STATIC_LOCAL.
        (WebCore::DocumentLoader::setContentFilterForBlockedLoad): Added; guarded by USE(CONTENT_FILTERING).
        (WebCore::DocumentLoader::handleContentFilterRequest): Added; guarded by USE(CONTENT_FILTERING) and PLATFORM(IOS).
        Also added a FIXME comment to remove the PLATFORM(IOS) guard inside its function body once we upstream
        file ContentFilterIOS.mm and implement ContentFilter::requestUnblockAndDispatchIfSuccessful() for Mac.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setResponse): Added; guard by PLATFORM(IOS). Also added a FIXME comment as
        this method seems to violate the encapsulation of DocumentLoader.
        (WebCore::DocumentLoader::subresourceLoadersArePageCacheAcceptable): Added.
        (WebCore::DocumentLoader::documentURL): Added; returns the URL of the document resulting from the DocumentLoader.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument): Added iOS-specific code to create a PDF document.
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::openDateTimeChooser): Opt out of compiling this code for iOS. Also substituted
        nullptr for 0.
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameLoader): Initialize m_loadsSynchronously.
        (WebCore::FrameLoader::initForSynthesizedDocument): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::FrameLoader::checkCompleted): Added iOS-specific code with FIXME comment.
        (WebCore::FrameLoader::willLoadMediaElementURL): Added iOS-specific code.
        (WebCore::FrameLoader::stopForUserCancel): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::commitProvisionalLoad): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::transitionToCommitted): Opt out of ENABLE(TOUCH_EVENTS) logic when building for iOS.
        (WebCore::FrameLoader::didFirstLayout): Added iOS-specific code.
        (WebCore::FrameLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        (WebCore::createWindow): Added iOS-specific code and FIXME comment.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setLoadsSynchronously): Added.
        (WebCore::FrameLoader::loadsSynchronously): Added.
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState): Opt out of scroll position logic when building for iOS.
        (WebCore::HistoryController::replaceCurrentItem): Added.
        * loader/HistoryController.h:
        * loader/PlaceholderDocument.h: Changed access control of constructor from private to protected and removed the FINAL
        keyword from the class so that we can subclass PlaceholderDocument on iOS.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Added USE(QUICK_LOOK)- and USE(CONTENT_FILTERING)-guarded code.
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::shouldUsePurgeableMemory): Added; guarded by PLATFORM(IOS).
        * loader/ResourceBuffer.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): Added USE(QUICK_LOOK)-guarded code.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Added iOS-specific code.
        (WebCore::ResourceLoadScheduler::scheduleLoad): Ditto.
        (WebCore::ResourceLoadScheduler::remove): Added iOS-specific code with FIXME comment.
        (WebCore::ResourceLoadScheduler::crossOriginRedirectReceived): Added null-check for variable oldHost. Also added
        iOS-specific code.
        (WebCore::ResourceLoadScheduler::servePendingRequests): Added iOS-specific code.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        (WebCore::ResourceLoader::willSendRequest): Ditto.
        (WebCore::ResourceLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::ResourceLoader::iOSOriginalRequest): Added; iOS-specific.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin): Added iOS-specific code.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Ditto.
        (WebCore::SubresourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::SubresourceLoader::didFinishLoading): Added iOS-specific code.
        (WebCore::SubresourceLoader::willCancel): Ditto.
        (WebCore::SubresourceLoader::notifyDone): Ditto.
        (WebCore::SubresourceLoader::releaseResources): Ditto.
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup): Added iOS-specific code.
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::executeSQLCommand): Ditto.
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Ditto.
        (WebCore::ApplicationCacheStorage::openDatabase): Ditto.
        (WebCore::ApplicationCacheStorage::executeStatement): Ditto.
        (WebCore::ApplicationCacheStorage::store): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedType): Ditto.
        (WebCore::ApplicationCacheStorage::ensureOriginRecord): Ditto.
        (WebCore::ApplicationCacheStorage::loadCache): Ditto.
        (WebCore::ApplicationCacheStorage::remove): Ditto.
        (WebCore::ApplicationCacheStorage::empty): Ditto.
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        (WebCore::ApplicationCacheStorage::manifestURLs): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupSize): Ditto.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Ditto.
        (WebCore::ApplicationCacheStorage::vacuumDatabaseFile): Ditto.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Added.
        (WebCore::CachedImage::imageSizeForRenderer): Added iOS-specific code.
        (WebCore::CachedImageManual::CachedImageManual): Added; guarded by USE(CF). Also added FIXME comment to incorporate
        the functionality of this class into CachedImage and to remove the USE(CF)-guard once we make MemoryCache::addImageToCache()
        platform-independent.
        (WebCore::CachedImageManual::mustRevalidateDueToCacheHeaders): Added; guarded by USE(CF).
        * loader/cache/CachedImage.h: Removed FINAL keyword from class so that we can define derived class CachedImageManual.
        (WebCore::CachedImage::isManual): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::CachedImageManual::addFakeClient): Added; guarded by USE(CF).
        (WebCore::CachedImageManual::removeFakeClient): Added; guarded by USE(CF).
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load): Added iOS-specific code.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone): Added argument shouldPerformPostLoadActions, defaults to true. Modified
        to conditionally call performPostLoadActions() with respect to the argument shouldPerformPostLoadActions.
        (WebCore::CachedResourceLoader::preload): Added iOS-specific code.
        (WebCore::CachedResourceLoader::checkForPendingPreloads): Ditto.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add): Added iOS-specific code.
        (WebCore::MemoryCache::revalidationFailed): Ditto.
        (WebCore::MemoryCache::resourceForRequest): Ditto.
        (WebCore::MemoryCache::addImageToCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::removeImageFromCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::pruneLiveResources): Modified to take argument shouldDestroyDecodedDataForAllLiveResources.
        (WebCore::MemoryCache::pruneLiveResourcesToSize): Modified to take argument shouldDestroyDecodedDataForAllLiveResources,
        defaults to false. When this argument is true we destroy the decoded data for all live resources from the memory cache.
        Such functionality is useful when the system is running low on memory.
        (WebCore::MemoryCache::evict): Added iOS-specific code.
        * loader/cache/MemoryCache.h:
        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray): Actually make this code compile. In particular, there is no
        method called sendDataToResource on SubresourceLoader or in its class hierarchy.
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule): This method has an empty implementation when building for iOS.
        (WebCore::DocumentLoader::unschedule): Ditto.
        * platform/graphics/BitmapImage.h: Exposed decodedSize() to access the decoded size of the bitmap image.
        This functionality is used in MemoryCache::addImageToCache().

2013-12-19  Jer Noble  <jer.noble@apple.com>

        Build fix for platforms which do not define -[AVSampleBufferAudioRenderer muted].
        Rubber-stamped by Eric Carlson.

        To work around platforms with broken AVSampleBufferAudioRenderer headers, just
        declare only those functions we need, and update isAvalable to bail out early if
        those methods are not present.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2013-12-16  Darin Adler  <darin@apple.com>

        Improve "bad parent" and "bad child list" assertions in line boxes
        https://bugs.webkit.org/show_bug.cgi?id=125656

        Reviewed by Sam Weinig.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Use parent() function with assertions rather than
        using m_parent function, which skips the assertions.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes): Call invalidateParentChildLists
        if we are in the optimized document-destruction code path and destroying children
        without removing them from their parents.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::invalidateParentChildLists): Added.
        * rendering/RenderTextLineBoxes.h: Added invalidateParentChildLists.

2013-12-19  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15696824> [CFNetwork] Loading stops at server redirects
        https://bugs.webkit.org/show_bug.cgi?id=125984

        Reviewed by Anders Carlsson.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest): If the client uses async callbacks, call its
        willSendRequestAsync callback instead if willSendRequest.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties: Deferred properties should have inline capacity.
        <https://webkit.org/b/125994>

        Give CascadedProperties::m_deferredProperties an inline capacity
        of 8 to sidestep malloc churn (0.2% of HTML5-8266 profile.)

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Two small refinements to matched properties cache.
        <https://webkit.org/b/125992>

        - Avoid computing the matched properties hash if we're banned from
          using the cache anyway.

        - When adding a new entry to the cache, use move semantics to avoid
          creating a transient copy of all the data.

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties should use a bitset to track property presence.
        <https://webkit.org/b/125991>

        Avoid zeroing out a bunch of memory in the CascadedProperties ctor
        by using a bitset to track whether each property is present in the
        cascaded set.

        Reviewed by Antti Koivisto.

2013-12-19  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Fix description of parameters in Page.setGeolocationOverride
        https://bugs.webkit.org/show_bug.cgi?id=125983

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/protocol/Page.json:

2013-12-18  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferRendererSynchronizer support.
        https://bugs.webkit.org/show_bug.cgi?id=125954

        Reviewed by Eric Carlson.

        Instead of slaving all the various renderer's CMTimebases to one master timebase,
        use AVSampleBufferRenderSynchronizer, which essentially does the same thing.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::CMTimebaseEffectiveRateChangedCallback): Added; call effectiveRateChanged().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Set up
            the synchronizer and all the observers.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC): Tear down
            the same.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require the
            AVSampleBufferRenderSynchronizer class.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal): Convert Clock -> Synchronizer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::effectiveRateChanged): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer): Ditto.

        Drive-by fix; audio samples can't be subdivided, and video samples are
        rarely combined, so remove the call to CMSampleBufferCallForEachSample:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Fall back to cache-less cascade when encountering explicitly inherited value.
        <https://webkit.org/b/125968>

        When encountering an explicitly inherited value for a property that's not
        "statically inherited", drop out of the matched properties cache path
        immediately instead of waiting for some coincidence to trigger it later on.

        Fixes 3 asserting table tests:

        - fast/table/border-collapsing/cached-69296.html
        - tables/mozilla/bugs/bug27038-3.html
        - tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html

        Reviewed by Antti Koivisto.

2013-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches
        https://bugs.webkit.org/show_bug.cgi?id=125970

        Reviewed by Antti Koivisto.

        The bug was caused by containingBlockForAbsolutePosition returning a non-RenderBlock render object.
        Fixed the bug by obtaining its containg block.

        Also changed the return type of containingBlockForFixedPosition, containingBlockForAbsolutePosition,
        containingBlockForObjectInFlow from RenderElement to RenderBlock as all callers of these functions
        had assumed the return value to be an instance of RenderBlock.

        Test: svg/text/select-text-inside-non-static-position.html

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::containingBlockForFixedPosition):
        (WebCore::containingBlockForAbsolutePosition):
        (WebCore::containingBlockForObjectInFlow):
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):

2013-12-18  Andreas Kling  <akling@apple.com>

        Don't waste cycles on zeroing every CascadedProperties::Property.
        <https://webkit.org/b/125966>

        The CascadedProperties constructor already zeroes out the whole
        property array. Move the memset() to setDeferred() which is the only
        other place we create a Property.

        Brought to you by Instruments.app. Profile your code today!

        Reviewed by Antti Koivisto.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify the BoxShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125548

        Reviewed by Andreas Kling.

        Reduce BoxShape's footprint by about 2/3rds. Instead of caching the
        FloatRoundedRects which represent a BoxShape's shape-padding and shape-margin
        boundaries, compute them as needed.

        No new tests, this is just an internal refactoring.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::shapeMarginLogicalBoundingBox): Now just computes the bounding box rect.
        (WebCore::BoxShape::shapePaddingLogicalBoundingBox): Ditto.
        (WebCore::BoxShape::shapeMarginBounds): Removed the caching logic.
        (WebCore::BoxShape::shapePaddingBounds): Ditto.
        (WebCore::BoxShape::getExcludedIntervals): Use the computed margin bounds, instead of the cached one.
        (WebCore::BoxShape::getIncludedIntervals): Ditto (padding bounds).
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape): Simplified the constructor.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferAudioRenderer support.
        https://bugs.webkit.org/show_bug.cgi?id=125905

        Reviewed by Eric Carlson.

        On platforms which support AVSampleBufferAudioRenderer, add support
        for playback of audio CMSampleBufferRefs generated by AVStreamDataParser.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require AVSampleBufferAudioRenderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume): Pass through to every audio renderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Slave the renderer's
            timebase to the master clock.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Drive by fix; initialize
            m_enabledVideoTrackID.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC): Call destroyRenderers().
        (WebCore::callProcessCodedFrameForEachSample): Drive by fix; convert the bool return to an OSErr.
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): Added; flush and destroy the audio
            renderers.  
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Call destroyRenderers().
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Enable or disable the audio
            renderer in response.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Added audio
            specific version.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.

2013-12-18  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover code from InspectorController after r108965
        https://bugs.webkit.org/show_bug.cgi?id=125956

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/InspectorController.h: PostWorkerNotificationToFrontendTask was removed in r108965.

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Add a property cascading pass to style application.
        <https://webkit.org/b/125213>

        Add an intermediate pass to style application where we cascade all
        style properties to figure out their final values before starting
        to build RenderStyles.

        This opens up various opportunities for further optimization.

        Reviewed by Antti Koivisto.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::Property):
        (WebCore::StyleResolver::CascadedProperties::CascadedProperties):
        (WebCore::StyleResolver::CascadedProperties::property):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::CascadedProperties::addStyleProperties):
        (WebCore::StyleResolver::CascadedProperties::addMatches):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Added. CascadedProperties is something of a container class
            that takes CSS property/value/linkMatchType as input and boils
            them down to the final values that will actually be used.

            Most properties are poked into an unfancy array where latest
            is greatest (unless !important, of course.) Some properties are
            queued up to be applied in parse order, more on that below.

        (WebCore::StyleResolver::applyCascadedProperties):
        (WebCore::StyleResolver::applyMatchedProperties):

            The brains of this patch. applyMatchedProperties() now creates
            a CascadedProperties and uses it to figure out the final values
            and uses applyCascadedProperties() to apply them. Deferred
            properties (parse order) are applied last.

            We may discover during property application that we won't be
            able to use a matched properties cache item. This happens if
            the effective zoom or font changes. If that happens, we start
            the process over, now with the cache disabled. This may need
            some optimization work.

        (WebCore::extractDirectionAndWritingMode):

            Directional properties ending in e.g -before or -after depend on
            the direction and writing mode in effect, so we must begin with
            resolving those properties before doing the full cascade.

            This is done by simply walking the set of matched properties and
            manually applying '-webkit-writing-mode' and 'direction'.

            If this starts showing up in profiles, we can easily cache some
            of the information in e.g RuleData to avoid the traversal here.

        (WebCore::elementTypeHasAppearanceFromUAStyle):

            To determine whether a form element is styled beyond the default
            UA style sheet, StyleResolver caches the border and background
            values from RenderStyle after applying the UA style sheet.

            Those values are then compared against after all style is applied
            and if some (platform-dependent) values differ, the element is
            considered "styled."

            This really only affects elements with -webkit-appearance values
            in the default UA style sheet, so this function determines if an
            element should take the goofy slow path for this.

        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::StyleResolver::CascadedProperties::setDeferred):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):

            Some CSS properties will write to the same RenderStyle fields when
            applied, so in order to maintain previous behavior, we must apply
            them in the order they were parsed.

            We accomplish this by keeping an ordered queue of such properties
            to apply separately after all the other properties.

        (WebCore::StyleResolver::CascadedProperties::setPropertyInternal):

            Helper for poking values into a CascadedProperties::Property.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::state):

            Expose the StyleResolver::State so CascadedProperties can access it.

2013-12-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=116377

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Add a missing source required by WebKit1 to
        the WebCore build.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify RectangleShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125536

        Reviewed by Andreas Kling.

        Instead of caching an instance of a private FloatRoundedRect (ish) class for
        RectangleShape's shape-margin and shape-padding bounds, we just compute
        the FloatRect and radii as needed. This reduces the classes footprint a little
        and it simplifies the implementation.

        Removed the private RectangleShape::ShapeBounds class and made its
        cornerInterceptForWidth() method a static function. Added members for
        the RectangleShape constructor args, and private getters for their properties.

        There are no new tests because this is just an internal refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::ellipseXIntercept):
        (WebCore::ellipseYIntercept):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::cornerInterceptForWidth):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        (WebCore::RectangleShape::buildPath):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        (WebCore::RectangleShape::rx):
        (WebCore::RectangleShape::ry):
        (WebCore::RectangleShape::x):
        (WebCore::RectangleShape::y):
        (WebCore::RectangleShape::width):
        (WebCore::RectangleShape::height):
        * rendering/shapes/Shape.cpp:
        (WebCore::createCircleShape): Renamed this internal function (it was createShapeCircle) because it was inconsistent.
        (WebCore::createEllipseShape): Ditto.
        (WebCore::Shape::createShape):

2013-12-18  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple stack abstraction for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125908

        Reviewed by Geoffrey Garen.

        StackAllocator provides an abstraction to make it hard to make mistakes and protects from obvious
        issues at runtime.

        The key roles of StackAllocators are:
        -Provide the necessary stack alignment for function calls (only x86_64 stack for now).
        -Provide ways to save registers on the stack, restore or discard them as needed.
        -Crash at runtime if an operation would obviously cause a stack inconsistency.

        The way simple inconsistencies are detected is through the StackReference object
        returned whenever something is added on the stack.
        The object keeps a reference to the offset of what has been pushed. When the StackReference
        is used to recover the register, if the offset is different, there is a missmatch between
        push() and pop() after the object was pushed.

        * cssjit/StackAllocator.h: Added.
        (WebCore::StackAllocator::StackReference::StackReference):
        (WebCore::StackAllocator::StackReference::operator unsigned):
        (WebCore::StackAllocator::StackAllocator):
        (WebCore::StackAllocator::~StackAllocator):
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):

        (WebCore::StackAllocator::alignStackPreFunctionCall):
        (WebCore::StackAllocator::unalignStackPostFunctionCall):
        Those helpers provide a simple way to have a valid stack prior to a function call.
        Since StackAllocator knows the offset and the platform rules, it can adjust the stack
        if needed for x86_64.

        (WebCore::StackAllocator::discard): Discard a single register or the full stack.

        (WebCore::StackAllocator::combine): combining stacks is the way to solve branches
        where the stack is used differently in each case.
        To do that, the stack is first copied to A and B. Each branch works on its own
        StackAllocator copy, then the two copies are linked together to the original stack.

        The copies ensure the local consistency in each branch, linking the copies ensure global
        consistencies and that both branches end in the same stack state.

        (WebCore::StackAllocator::offsetToStackReference): Helper function to access the stack by address
        through its StackReference.

        (WebCore::StackAllocator::reset):

2013-12-18  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for GStreamer on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=125946

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        Use new GStreamer property sheets for WinCairo.
        * WebCore.vcxproj/WebCoreCairo.props:
        Include GStreamer directory.

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Refactor CodeGeneratorJS - Move attribute function creation out of getOwnPropertyName guard
        https://bugs.webkit.org/show_bug.cgi?id=125940

        Reviewed by Simon Fraser.

        This is just a huge block move of code out from behind the
        ImplementationOverridesGetOwnProperty guard.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2013-12-18  Tim Horton  <timothy_horton@apple.com>

        [iOS] Frequent ASSERT(hasOneRef()) in SharedBuffer::releasePurgeableBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125939

        Reviewed by Simon Fraser.

        r146082 fixed these assertions by not making a purgeable buffer if a SharedBuffer
        has multiple refs, but the check was put in ResourceBuffer::createPurgeableBuffer
        instead of down in SharedBuffer::createPurgeableBuffer.

        This is fine for most WebKit ports, because ResourceBuffer::createPurgeableBuffer
        is the only caller of SharedBuffer::createPurgeableBuffer, but causes trouble for
        not-quite-yet-upstreamed iOS SharedBuffer code, which adds another caller
        of SharedBuffer::createPurgeableBuffer.

        Push the early-return down into SharedBuffer::createPurgeableBuffer to ensure
        that all callers are protected from creating a purgeable buffer if the SharedBuffer
        has previously been vended elsewhere.

        No new tests, has no effect on the current Open Source tree.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::createPurgeableBuffer):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createPurgeableBuffer):

2013-12-18  Beth Dakin  <bdakin@apple.com>

        Starting a momentum scroll while rubber banding can cause scrolling to jump back 
        when the rubberband snaps
        https://bugs.webkit.org/show_bug.cgi?id=119507
        -and corresponding-
        <rdar://problem/14655893>

        Reviewed by Simon Fraser.

        This line of code was added with the very first implementation of rubber-banding. 
        As far as I can tell, it was always a belt-and-suspenders line of code that is a 
        no-op in all normal rubber-banding. In this J-shaped scrolling case, this line of 
        code is what causes the bug to occur because this line of code assumes that your 
        rubber-band is always trying to take you back to the origin. 
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: make aria-hidden=false work with subtrees
        https://bugs.webkit.org/show_bug.cgi?id=125592

        Reviewed by Mario Sanchez Prada.

        When a hidden object uses aria-hidden=false, that needs to apply to
        the entire sub-tree (not just the object with aria-hidden on it as it does now).

        Enabling this had the side effect of exposing non-rendered text nodes, so there's
        some extra checks to ensure we don't include those elements in this cases.

        Test: accessibility/aria-hidden-false-works-in-subtrees.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored):

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Simplify bindings codegen for adding getOwnPropertySlot overrides
        https://bugs.webkit.org/show_bug.cgi?id=125934

        Reviewed by Alexey Proskuryakov.

        Simple refactoring no change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateHeader):
        (GenerateImplementation):

2013-12-18  Conrad Shultz  <conrad_shultz@apple.com>

        AudioSessionManagerMac.cpp: kLowPowerVideoBufferSize unused before OS X 10.9
        https://bugs.webkit.org/show_bug.cgi?id=125935

        Reviewed by Jer Noble.

        * platform/audio/mac/AudioSessionManagerMac.cpp:
        Add __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 guard.

2013-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic DebuggerAgent cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125901

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDebuggerAgent.h:
        Remove virtual from not really virtual method.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        Use member variable instead of private function.

        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        Inline the three lines from the private function.

2013-12-18  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        REGRESSION (r155536): Broken error recovery in @media at-rule
        https://bugs.webkit.org/show_bug.cgi?id=125637

        Reviewed by Darin Adler.

        Error recovery in @media is broken if any of its rules misses the opening '{'.
        The problem is that when the parser recognises the mistake it removes only the last
        WHITESPACE token instead of the whole selector and tries to recover the selector again.
        it swallows everything until it finds the next opening bracket. thats why the '}' brackets
        of both subrules and even the @media rule are ignored, and the whole @media will be
        considered invalid. By joining the selector and its trailing whitespace the error recovery
        ignores the bad selector only and keep the @media rule.

        Test: fast/css/media-error-recovery.html

        * css/CSSGrammar.y.in:

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit not sending AXMenuClosed notification
        https://bugs.webkit.org/show_bug.cgi?id=125783

        Reviewed by Mario Sanchez Prada.

        When an object with a role=menu is removed, we need to send out a notification informing that the menu has closed.
        This means detecting the right kind of destruction event for an element, because we do not want to 
        send this notification when the entire cache is being torn down.

        Test: platform/mac/accessibility/aria-menu-closed-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::document):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::detach):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::detach):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::detach):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2013-12-18  Eric Carlson  <eric.carlson@apple.com>

        Do not create cue subtree just to delete it
        https://bugs.webkit.org/show_bug.cgi?id=125904

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setIsActive): Return early if display tree is NULL.
        (WebCore::TextTrackCue::removeDisplayTree): Ditto.

2013-12-17  Oliver Hunt  <oliver@apple.com>

        Remove JSInlineGetOwnPropertySlot attribute as it is no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=125875

        Reviewed by Brady Eidson.

        Tested this on dromaeo and acid3 (the original reason for this attribute)
        and it no longer provided any benefit. This makes it easier to reason about
        creation of getOwnPropertySlot during binding generation.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:

2013-12-18  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Fix ASSERTION FAILED in WebCore::SVGLengthContext::determineViewport
        https://bugs.webkit.org/show_bug.cgi?id=120284

        Reviewed by Philip Rogers.

        Added handling of root <svg> elements.
        Blink merge: https://chromium.googlesource.com/chromium/blink/+/a7dedf81eb7008276bb6854f0e46465e039788f8

        SVGLengthContext::determineViewport() currently asserts that we're not
        resolving lengths for the topmost element, but there's nothing to
        prevent such calls.

        The patch updates determineViewport() to handle root elements geracefully
        (using their current viewport). It also changes the signature slightly
        to operate directly on a FloatSize, reducing some of the boiler-plate
        client code.

        Tests: svg/custom/svg-length-value-handled.svg
               svg/dom/svg-root-lengths.html

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage):
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits):
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLengthContext.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2013-12-18  Darin Adler  <darin@apple.com>

        Additional refinement in MathMLSelectElement toggle implementation
        https://bugs.webkit.org/show_bug.cgi?id=125785

        Reviewed by Andreas Kling.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::defaultEventHandler): Call setDefaultHandled
        so this will be handled by only one element.
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents): Return true
        only when action is set to toggle, since other select elements will not
        respond to mouse click events.
        (WebCore::MathMLSelectElement::toggle): Simplified code a bit and gave
        local a clearer variable name.

2013-12-18  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Implement interpolation between keywords in basic shapes
        https://bugs.webkit.org/show_bug.cgi?id=125108

        Reviewed by Simon Fraser.

        Allow blending for all center coordinates since top/left and bottom/right default to correct
        Length values of 0% and 100%. For mixed keyword and value positions compute the length's used
        for blending to percentages. This is possible since we compute the reference box bounds given the
        renderer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Pass additional RenderBox parameter.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Don't check circle/ellipse center anymore, but do check that both
        shapes use the same reference box.
        (WebCore::BasicShape::referenceBoxSize): Compute box dimension depending on reference box.
        (WebCore::BasicShapeCenterCoordinate::lengthForBlending): Convert to percentage for Bottom/Right.
        (WebCore::BasicShapeRectangle::blend):
        (WebCore::DeprecatedBasicShapeCircle::blend):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInsetRectangle::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::blend): Use new lengthForBlending.

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        CSS: Null-pointer dereference with negative 'orphans' value.
        https://bugs.webkit.org/show_bug.cgi?id=125924

        Reviewed by Andreas Kling.

        orphans and widows should be positive integer.

        spec link:
        http://www.w3.org/TR/CSS2/page.html#propdef-orphans

        Backported from Blink: https://codereview.chromium.org/108663009

        Test: fast/css/negative-orphans-crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2013-12-18  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return values by PassRef.
        <https://webkit.org/b/125923>

        Tighten yet another handful of CSS computed style helper functions
        to return their CSSValues by PassRef where we never return null.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        Use range for syntax in Frame and FrameView.
        <https://webkit.org/b/125922>

        Convert code in Frame and FrameView to use C++11's range for syntax.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        RenderElement-ize adjustForAbsoluteZoom() and friends.
        <https://webkit.org/b/125921>

        Make adjustForAbsoluteZoom() take a const RenderElement& instead
        of a RenderObject* so we can avoid the extra branch in style().
        All call sites already had RenderElements.

        Reviewed by Antti Koivisto.

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: HTML spec change indicates @aria-required should trump @required on any element
        https://bugs.webkit.org/show_bug.cgi?id=122145

        Reviewed by Mario Sanchez Prada.

        aria-required should win over the native "required" attribute.

        Updated tests: accessibility/aria-required.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):

2013-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [soup] Fix unused parameter warnings in ResourceHandleSoup.
        https://bugs.webkit.org/show_bug.cgi?id=125918

        Reviewed by Martin Robinson.

        Comment out the method parameters to avoid the warnings.

        No tests required.

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

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Periodically monitor source buffers.
        https://bugs.webkit.org/show_bug.cgi?id=125898

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-monitor-source-buffers.html

        The MSE spec requires that the SourceBuffer Monitoring step is run
        periodically during playback. No specific update interval is specified
        so we will re-use the existing HTMLMediaElement playback progress
        timer to signal the media source monitoring.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::playbackProgressTimerFired):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Add per-track signalling between SourceBuffer and SourceBufferPrivate.
        https://bugs.webkit.org/show_bug.cgi?id=125899

        Reviewed by Eric Carlson.

        To accommodate the future addition of audio support to MSE in the Mac
        port, add the concept of trackIDs to the communication between
        SourceBuffer and SourceBufferPrivate.

        The following virtual methods  now take a trackID parameter:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivate::stopAskingForMoreSamples):
        (WebCore::SourceBufferPrivate::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateDidBecomeReadyForMoreSamples):

        Update overridden methods in subclasses:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Change the logic in provideMediaData to update a single TrackBuffer
        rather than iterating over all of them:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::provideMediaData):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::hasFrontend
        https://bugs.webkit.org/show_bug.cgi?id=125907

        Reviewed by Timothy Hatcher.

        Remove InspectorAgent::hasFrontend only used by
        InspectorInstrumentation::collectingHTMLParseErrors. However,
        following the single callers of that, the result is unused
        in the HTMLDocumentParser and HTMLTreeBuilder. So remove
        more stale / unused code.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic InjectedScriptHost cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125902

        Reviewed by Timothy Hatcher.

        Remove InjectedScriptHost::scriptDebugServer. Nobody accesses
        the ScriptDebugServer through the injected script host. This
        also lets us remove the reference to the DebuggerAgent.

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorFrontendHost.setInjectedScriptForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=125906

        Reviewed by Timothy Hatcher.

        Remove stale code related to a since removed feature,
        Inspector extensions. This allows us to remove a number
        of entry points into InspectorAgent.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        Remove setInjectedScriptForOrigin and InjectedScript management.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Remove the API and calling through InspectorController.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        Remove now unnecessary calls into InspectorAgent.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        Fix TimeRanges::intersectWith
        https://bugs.webkit.org/show_bug.cgi?id=118802

        Test: TestWebKitAPI/Tests/WebCore/TimeRanges.cpp.

        Reviewed by Eric Carlson.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/TimeRanges.cpp:
        (TimeRanges::invert):
        (TimeRanges::intersectWith):

        Merge
        https://chromium.googlesource.com/chromium/blink/+/f557582b6c6283a8b165514f52d01cfd98130e85        

2013-12-17  Eric Carlson  <eric.carlson@apple.com>

        ASSERT setting pseudoID with registered DOMSubtreeModified listener
        https://bugs.webkit.org/show_bug.cgi?id=125900

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/attribute-set-before-element-in-tree.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent): Return early if the node does not have a
            parent and does not have a DOMSubtreeModified listener.

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Remove dead code for reflected attributes from audio, video, and track elements
        https://bugs.webkit.org/show_bug.cgi?id=125838

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/310514e2f0fd934975b841d463bad0cd62e6fd64

        Where [Reflect] is used in the IDL, the getters and setters in C++ are
        only for internal convenience, and these were unused.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:

2013-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename "canRubberBands" to "canRubberBand"
        https://bugs.webkit.org/show_bug.cgi?id=125897

        Reviewed by Anders Carlsson.

        Rename "canRubberBands" to "canRubberBand" in various places.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::setCanRubberBandState):
        * page/scrolling/ScrollingTree.h:

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Update duration after appending samples, per spec.
        https://bugs.webkit.org/show_bug.cgi?id=125703

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-duration-after-append.html

        After appending a sample, update the MediaSource duration if the sample's
        presentation end time is greater than the existing duration.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::setDuration): Notify the MediaPlayer.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Null-deref in CMSampleBufferIsRandomAccess().
        https://bugs.webkit.org/show_bug.cgi?id=125698

        Reviewed by Sam Weinig.

        If a given CMSampleBufferRef does not have a sample attachments array (which is unlikely, but
        possible), CMSampleBufferGetAttachmentsArray() will return a null value.

        Additionally, the CMSampleBuffer documentation states that "samples are assumed to be sync
        samples by default", so the absence of an attachment array (or the absense of a
        kCMSampleAttachmentKey_NotSync entry in any of the attachment dictionaries) indicates the
        sample is sync.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::CMSampleBufferIsRandomAccess):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Video element's width and height content attributes should not influence intrinsic width and height
        https://bugs.webkit.org/show_bug.cgi?id=125822

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/022ce34efb5b70cb964c3ca29f23c8980ffaef05

        The width/height content attributes already influence specified style via
        HTMLVideoElement::collectStyleForPresentationAttribute, to also influence the intrinsic size has never
        been part of the spec: http://www.w3.org/TR/2013/WD-html51-20130528/embedded-content-0.html#dom-dim-width

        The test case passes in Firefox Nightly and IE11 Release Preview, but fails in Opera Presto, which has
        no default intrinsic size.

        Test: media/video-intrinsic-width-height.html

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/html changes
        https://bugs.webkit.org/show_bug.cgi?id=125765

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * html/Autocapitalize.cpp: Added.
        * html/Autocapitalize.h: Added. Also, added FIXME comment to forward declare AtomicString once we upstream
        more of the iOS port.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent): Opt out of code when building for iOS.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isKeyboardFocusable): Added; iOS-specific.
        * html/BaseDateAndTimeInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType): Added iOS-specific code.
        (WebCore::FileInputType::~FileInputType): Opt out of code when building for iOS. Also, added FIXME comment.
        (WebCore::FileInputType::requestIcon): Ditto.
        (WebCore::FileInputType::filesChosen): Added; iOS-specific.
        (WebCore::FileInputType::displayString): Added; iOS-specific.
        (WebCore::FileInputType::receiveDroppedFiles): Guarded code with ENABLE(DRAG_SUPPORT).
        * html/FileInputType.h:
        * html/FormController.cpp:
        (WebCore::FormController::formElementsCharacterCount): Added.
        * html/FormController.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget): Opt out of code when building for iOS.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath): Changed argument datatype from RenderElement* to RenderObject*.
        Also, added FIXME comment to fix this up once we upstream iOS's DOMUIKitExtensions.{h, mm}.
        (WebCore::HTMLAreaElement::computeRect): Ditto.
        * html/HTMLAreaElement.h:
        * html/HTMLAttributeNames.in: Added attributes ongesture{start, change, end}, autocorrect, autocapitalize,
        data-youtube-id, onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, webkit-playsinline,
        x-webkit-airplay, and x-webkit-wirelessvideoplaybackdisabled.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft): Added iOS-specific code.
        (WebCore::HTMLBodyElement::scrollTop): Ditto.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLCanvasElement::createImageBuffer): Added iOS-specific code.
        * html/HTMLCanvasElement.h: Added iOS-specific code and FIXME comment.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Added argument isSynthesized (default to false), which is
        passed through to Document::Document(), to create a synthesized document.
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::createSynthesizedDocument): Added.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute): Added iOS-specific code.
        (WebCore::populateEventNameForAttributeLocalNameMap): Ditto.
        (WebCore::HTMLElement::willRespondToMouseMoveEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseWheelEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp: Added FIXME comment to share more code with class HTMLFormElement.
        (WebCore::HTMLFormControlElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp: Added FIXME comment to share more code with class HTMLFormControlElement.
        (WebCore::HTMLFormElement::submitImplicitly): Modified to code to allow implicit submission of multi-input
        forms only if Settings::allowMultiElementImplicitSubmission() returns true. Such behavior is expected by older
        iOS apps. Also, changed datatype of variable submissionTriggerCount from int to unsigned because it represents
        a non-negative value.
        (WebCore::HTMLFormElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLIFrameElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::displayString): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLInputElement::dateType): Added; guarded by PLATFORM(IOS).
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::willRespondToMouseClickEvents): Added iOS-specific code.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Added iOS-specific code.
        (WebCore::HTMLMediaElement::parseMediaPlayerAttribute): Added; iOS-specific.
        (WebCore::HTMLMediaElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::playInternal): Ditto.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::setVolumne): Opt out of code when building for iOS.
        (WebCore::HTMLMediaElement::setMuted): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Added iOS-specific code.
        (WebCore::HTMLMediaElement::updateVolume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::resume): Added iOS-specific comment. See <rdar://problem/9751303>.
        (WebCore::HTMLMediaElement::deliverNotification): Added iOS-specific code.
        (WebCore::HTMLMediaElement::getPluginProxyParams): Added iOS-specific code. Also, changed src() to getNonEmptyURLAttribute()
        in the non-iOS code as their doesn't exist a method called src in this class or its superclasses.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackTargetAvailabilityChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::addEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::removeEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enterFullscreen): Added iOS-specific code.
        (WebCore::HTMLMediaElement::exitFullscreen): Ditto.
        (WebCore::HTMLMediaElement::createMediaPlayer): Added ENABLE(IOS_AIRPLAY)-guarded code.
        (WebCore::HTMLMediaElement::userRequestsMediaLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLMediaElement::shouldUseVideoPluginProxy): Use dot operator instead of dereference operator (->)
        when accessing Document::settings().
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added ENABLE(PLUGIN_PROXY_FOR_VIDEO)-guarded code.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::userGestureRequiredToShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLMediaElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attributes and functions:webkitCurrentPlaybackTargetIsWireless,
        onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, and webkitShowPlaybackTargetPicker().
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Added iOS-specific code.
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldNotPerformURLAdjustment): Added; iOS-specific.
        (WebCore::HTMLObjectElement::parametersForPlugin): Modified to call shouldNotPerformURLAdjustment() when
        building for iOS.
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createRenderer): Added iOS-specific code.
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree): Added; iOS-specific.
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList): Added iOS-specific code.
        (WebCore::HTMLSelectElement::createRenderer): Ditto.
        (WebCore::HTMLSelectElement::childShouldCreateRenderer): Ditto.
        (WebCore::HTMLSelectElement::willRespondToMouseClickEvents): Added; iOS-specific.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added iOS-specific code.
        (WebCore::HTMLSelectElement::scrollToSelection): Ditto.
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer): Ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Opt out of code when building for iOS.
        (WebCore::HTMLSelectElement::defaultEventHandler): Added iOS-specific code.
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Opt out of code when building for iOS.
        (WebCore::HTMLTextFormControlElement::hidePlaceholder): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary): Added; guarded by PLATFORM(IOS).
        * html/HTMLTextFormControlElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Fix up call to HTMLMediaElement::createRenderer().
        (WebCore::HTMLVideoElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLVideoElement::supportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::webkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLVideoElement::setWebkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attribute: webkitWirelessVideoPlaybackDisabled.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Added iOS-specific code.
        (WebCore::ImageDocument::scale): Ditto.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::imageClicked): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        (WebCore::ImageDocument::windowSizeChanged): Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::dateType): Added; guarded by PLATFORM(IOS).
        (WebCore::InputType::isKeyboardFocusable): Added iOS-specific code.
        (WebCore::InputType::displayString): Added; guarded by PLATFORM(IOS).
        * html/InputType.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Added iOS-specific code.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleTouchEvent): Ditto.
        (WebCore::RangeInputType::disabledAttributeChanged): Added; iOS-specific.
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult): Opt out of code when building for iOS.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isKeyboardFocusable): Added iOS-specific code.
        * html/TextFieldInputType.h:
        * html/WebAutocapitalize.h: Added.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData): Added iOS-specific code.
        (WebCore::CanvasRenderingContext2D::getImageData): Ditto.
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers): Added; guarded by PLATFORM(IOS).
        (WebCore::disallowTelephoneNumberParsing): Added; guarded by PLATFORM(IOS).
        (WebCore::shouldParseTelephoneNumbersInNode): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): Guarded member initialization of m_controls with ENABLE(VIDEO_TRACK). Also added UNUSED_PARAM(event) when building with
        VIDEO_TRACK disabled.
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Added UNUSED_PARAM(event) when
        building with VIDEO_TRACK disabled.
        * html/shadow/MediaControls.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): Added iOS-specific code.
        (WebCore::SliderThumbElement::dragFrom): Opt out of code when building for iOS.
        (WebCore::SliderThumbElement::willDetachRenderers):  Added iOS-specific code.
        (WebCore::SliderThumbElement::exclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::setExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::clearExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::findTouchWithIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchStart): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchMove): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEndAndCancel): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::didAttachRenderers): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEvent): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::shouldAcceptTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::registerForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::unregisterForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::disabledAttributeChanged): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Opt out of code when building for iOS.
        * html/shadow/TextControlInnerElements.h:
        * page/Settings.in: Added setting allowMultiElementImplicitSubmission to enable/disable multi-input implicit form
        submission (disabled by default). Also added FIXME comment to rename this setting to allowMultiElementImplicitFormSubmission
        once we upstream the iOS changes to WebView.mm.

2013-12-17  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Pipe through object store IDs and transaction mode for "openTransaction"
        https://bugs.webkit.org/show_bug.cgi?id=125872

        Reviewed by Alexey Proskuryakov.

        Make these enums into enum classes.
        Add const maximums for each enum class that might be serialized to allow for conversion later:
        * Modules/indexeddb/IndexedDB.h:

        Add cross-thread copying for these new enum classes.
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/CrossThreadCopier.h:

        Adopt the new enum classes throughout the rest of WebCore:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::deleteFunction):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::value):
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createObjectStore):
        (WebCore::IDBDatabaseBackend::deleteObjectStore):
        (WebCore::IDBDatabaseBackend::createIndex):
        (WebCore::IDBDatabaseBackend::deleteIndex):
        (WebCore::IDBDatabaseBackend::get):
        (WebCore::IDBDatabaseBackend::put):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openCursor):
        (WebCore::IDBDatabaseBackend::deleteRange):
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::transactionStarted):
        (WebCore::IDBDatabaseBackend::transactionFinished):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackend::createTransaction):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):

        * WebCore.exp.in:

2013-12-17  Gavin Barraclough  <barraclough@apple.com>

        Remove PageVisibilityStateUnloaded
        https://bugs.webkit.org/show_bug.cgi?id=125869

        Reviewed by Anders Carlsson.

        This is not currently supported by WebKit, remove this enum value.
        We can always add this back later if/when we add support for this state.

        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString):
        * page/PageVisibilityState.h:
            - removed PageVisibilityStateUnloaded

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Build the plugin process against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=116374

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Split off the GTK+-dependent sources into
        libWebCorePlatformGTK and compile libWebCorePlatformGTK2 when
        WebKit2 is enabled.

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WebGL on Windows without GRAPHICS_SURFACE.
        https://bugs.webkit.org/show_bug.cgi?id=125867

        Reviewed by Martin Robinson.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        Protect reference to EGLOffScreenSurface with USE(GRAPHICS_SURFACE).

2013-12-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Positioned elements in regions get clipped if they fall outside the region
        https://bugs.webkit.org/show_bug.cgi?id=117120

        Reviewed by Mihnea Ovidenie.

        Fixed the computing of the box decorations clip rect when having statically positioned
        elements inside positioned elements. The existing algorithm computed the rect in a loop
        running up the containing block chain and only checked for positioned elements before 
        starting the loop. If a positioned elements was found in the middle of a loop (as would
        be the case with a positioned element parenting a non-positioned element), it was not 
        correctly handled.
        Also changed it so the clip is only performed in the fragmentation direction as that was 
        the original purpose of this method.

        Tests: fast/regions/absolute-in-relative-overflow.html
               fast/regions/static-in-relative-overflow.html
               fast/regions/sticky-border-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160717.
        http://trac.webkit.org/changeset/160717
        https://bugs.webkit.org/show_bug.cgi?id=125863

        New tests are failing, and possibly broke an existing test
        (Requested by ap on #webkit).

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Invalid dir attributes should resolve to ltr
        https://bugs.webkit.org/show_bug.cgi?id=125830

        Reviewed by Darin Adler.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/2d592d1c998bec9438e421e1ce1ee6caba05a884

        The dir attribute should resolve to direction: ltr by default when the attribute value is
        "not in a defined state": http://www.w3.org/TR/2013/WD-html51-20130528/dom.html#the-directionality

        Test: fast/dom/HTMLElement/set-and-clear-dir-attribute.html

        * html/HTMLElement.cpp:
        (WebCore::isLTROrRTLIgnoringCase): Extracted from HTMLElement::directionality.
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLElement::directionality):

2013-12-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Darin Adler.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        Modified also FlowThreadController::collectFixedPositionedLayers function
        to always return the layers sorted by z-index, as this operation was always
        done at the call sites.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        REGRESSION(r159166?): fast/block/float/float-with-fractional-height-vertical-lr.html, fast/block/float/float-with-fractional-height.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=124506

        Reviewed by Dirk Schulze.

        Floor the endpoints of the floating object interval to keep the old
        behavior until a better fix can be created.

        No new tests, fixes regression in existing tests.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::intervalForFloatingObject):

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        [Win] Visual Studio workaround for compiling WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=125808

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsContext3D.cpp:
        Don't inline outermost function to prevent Visual Studio crash.

2013-12-17  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for <dl>, <dt> and <dd>
        https://bugs.webkit.org/show_bug.cgi?id=125857

        Reviewed by Chris Fleizach.

        Map description lists to the newly introduced ATK roles
        ATK_ROLE_DESCRIPTION_LIST, ATK_ROLE_DESCRIPTION_TERM and
        ATK_ROLE_DESCRIPTION_VALUE, introduced in ATK 2.11.4.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Do the right mapping.
        (webkitAccessibleGetRole): Update call to atkRole, now that it
        receives an AccessibilityObject* as parameter.

2013-12-17  Frédéric Wang  <fred.wang@free.fr>

        Ensure inferred mrows for msqrt, mstyle, merror, mphantom and math.
        https://bugs.webkit.org/show_bug.cgi?id=124841

        Reviewed by Darin Adler.

        Tests: mathml/presentation/inferred-mrow-baseline.html
               mathml/presentation/inferred-mrow-stretchy.html

        * css/mathml.css: make merror, mphantom and mstyle behave like an mrow.
        (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle):
        * mathml/MathMLInlineContainerElement.cpp: ditto
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/mathtags.in: ditto
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paint): fix failure in mathml/presentation/phantom.html now that phantom can stretch operators.

2013-12-17  Simon Pena  <simon.pena@samsung.com>

        [NIX] Enable full debug builds by having ar creating thin archives
        https://bugs.webkit.org/show_bug.cgi?id=125850

        Reviewed by Csaba Osztrogonác.

        By default, CMake uses ar to generate libWebCore.a with cr parameters
        (do not warn if the library has to be created, and replace existing
        files in the archive). That results in a very large file, and ar fails
        with sizes over 4GB.

        By using thin archives (the T option of ar), the generated
        libWebCore.a is much smaller, and can be successfully archived. As a
        result, we can generate a full debug build. This patch is based on Xan
        López's webkit.org/b/110580.

        * PlatformNix.cmake: Instruct cmake to invoke ar with T option.

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160336.

        * bindings/gobject/webkitdom.symbols: Add new methods exposed for
        VideoPlaybackQuality.

2013-12-17  Mihai Maerean  <mmaerean@adobe.com>

        Fix hit testing for divs with a hierarchy of css transformed and non-transformed elements
        https://bugs.webkit.org/show_bug.cgi?id=124777

        Reviewed by Darin Adler.

        After bug #124647, the hit test will still behave incorrectly for transformed divs with non
        transformed siblings that are all inside a transformed element (tested by the
        hover-rotated-with-children-negative-z.html layout test).

        The fix is to not take zOffset into account during hit-testing when child layers are in the
        same 3D rendering context. Only when preserve3d is true, should hit-testing compute the
        zOffset of the layers with transformations and, when two layers overlap, to return the layer
        with the highest zOffset.

        The patch includes the work of a.renevier from https://codereview.chromium.org/79943002/

        Tests: transforms/3d/hit-testing/hover-rotated-with-children-negative-z.html
               transforms/3d/hit-testing/negative-zoffset-hit-test.html
               transforms/3d/hit-testing/overlapping-layers-hit-test.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeZOffset):
        (WebCore::RenderLayer::hitTestLayer):

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Martin Robinson.

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.

        * Modules/battery/NavigatorBattery.idl: Expose NavigatorBattery.

2013-12-17  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple register allocator to WebCore for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125771

        Reviewed by Geoffrey Garen.

        Add a brain dead register allocator to simplify the use of registers
        when writting code generators.

        RegisterAllocator has two purposes:
        -make it easy to name registers properly.
        -make it hard to reuse a register accidentally.

        A helper class LocalRegister is also defined to provide an easy
        way to work with registers within a C++ scope. For example:
            LocalRegister elementPointer(allocator);
            assembler.load(address, elementPointer);

        RegisterAllocator makes no attempt at optimizing register allocations, but it reduces
        implicit dependencies by returning used register at the end of the queue, making it less
        likely they will be reused before their last instruction is executed.

        The current implementation only support unix x86_64, it only uses caller saved registers.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/RegisterAllocator.h: Added.
        (WebCore::RegisterAllocator::allocateRegister): Provides any available register.
        To restrict runtime exploitation of compiler bugs, the method crashes in release
        if the register pool is empty.

        (WebCore::RegisterAllocator::reserveRegister): Reserve a particular register.
        (WebCore::RegisterAllocator::returnRegister): Return a previously allocated or reserved register.

        (WebCore::RegisterAllocator::allocatedRegisters):
        (WebCore::LocalRegister::LocalRegister):
        (WebCore::LocalRegister::~LocalRegister):
        (WebCore::LocalRegister::operator JSC::MacroAssembler::RegisterID):
        (WebCore::RegisterAllocator::RegisterAllocator):

2013-12-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking RTCPeerConnection signalingState before setting local/remoteDescription
        https://bugs.webkit.org/show_bug.cgi?id=125655

        Reviewed by Eric Carlson.

        Before setting a session description RTCPeerConnection must check if it is in valid state for that SDP type.

        New tests: fast/mediastream/RTCPeerConnection-have-local-answer.html
               fast/mediastream/RTCPeerConnection-have-local-offer.html
               fast/mediastream/RTCPeerConnection-have-local-pranswer.html
               fast/mediastream/RTCPeerConnection-have-remote-offer.html
               fast/mediastream/RTCPeerConnection-have-remote-pranswer.html
               fast/mediastream/RTCPeerConnection-stable.html

        Modified: fast/mediastream/RTCPeerConnection-remoteDescription.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::checkStateForLocalDescription): Checks if the current state of RTCPeerConnection is
        valid for the local SDP that is being set.
        (WebCore::RTCPeerConnection::checkStateForRemoteDescription): Checks if the current state of RTCPeerConnection
        is valid for the remote SDP that is being set.
        (WebCore::RTCPeerConnection::setLocalDescription): Now calls checkStateForLocalDescription prior to set the
        local SDP.
        (WebCore::RTCPeerConnection::setRemoteDescription): Now Calls checkStateForRemoteDescription prior to set the
        remote SDP.
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCNotifiersMock.cpp: Adding new class to notify RTCPeerConnection about a signaling state
        change: SignalingStateNotifier.
        (WebCore::SignalingStateNotifier::SignalingStateNotifier):
        (WebCore::SignalingStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::signalingStateFromSDP): Defines the new state that RTCPeerConnection
        should be, according the SDP that is being set.
        (WebCore::RTCPeerConnectionHandlerMock::setLocalDescription): Calls signalingStateFromSDP, in order to get the
        new signaling state and notify RTCPeerConnection object.
        (WebCore::RTCPeerConnectionHandlerMock::setRemoteDescription): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        Revert a mysterious and inexplicable part of http://trac.webkit.org/changeset/160685

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        (WebCore::KeyedEncoder::encodeObject):
        (WebCore::KeyedEncoder::encodeConditionalObject):
        (WebCore::KeyedEncoder::encodeObjects):

2013-12-16  Anders Carlsson  <andersca@apple.com>

        Remove EnumClass.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=125820

        Reviewed by Darin Adler.

        Replace uses of ENUM_CLASS with real enum class declarations.

        * Modules/webdatabase/DatabaseBasicTypes.h:
        * Modules/webdatabase/DatabaseError.h:
        * Modules/webdatabase/SQLTransactionState.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeyType.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * inspector/InspectorTimelineAgent.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Pinching beyond the extremes doesn't animate back to the min/max
        https://bugs.webkit.org/show_bug.cgi?id=125750

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export a few things so WebKit2 can use them.

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Fix some whitespace issues in inspector code
        https://bugs.webkit.org/show_bug.cgi?id=125814

        Reviewed by Darin Adler.

        * inspector/protocol/DOM.json:
        * inspector/protocol/DOMStorage.json:
        * inspector/protocol/Timeline.json:

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use JSC::SourceID and JSC::BreakpointID instead of WebCore dups
        https://bugs.webkit.org/show_bug.cgi?id=125818

        Reviewed by Mark Lam.

        Remove the WebCore typedefs of JSC types. Prefer JSC namespace
        prefixed types throughout WebCore's Inspector code.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Removed.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Removed.
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/dom changes
        https://bugs.webkit.org/show_bug.cgi?id=125646

        Reviewed by David Kilzer.

        * WebCore.exp.in: Added symbol __ZN7WebCore8Settings17setLayoutIntervalEi and removed symbol
        __ZN7WebCore24cLayoutScheduleThresholdE.
        * dom/ActiveDOMObject.h: Add suspension reason DocumentWillBePaused.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Opt-out of ENABLE(VIDEO) logic when
        building for iOS.
        * dom/DeviceMotionClient.h: Made class non-copyable.
        (WebCore::DeviceMotionClient::DeviceMotionClient): Added;
        * dom/DeviceMotionController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceMotionController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceMotionController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceMotionController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationClient.h: Made class non-copyable.
        (WebCore::DeviceOrientationClient::DeviceOrientationClient): Added.
        * dom/DeviceOrientationController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationData.cpp:
        (WebCore::DeviceOrientationData::create): Added; iOS-specific. Added FIXME comment.
        (WebCore::DeviceOrientationData::DeviceOrientationData): Added iOS-specific code.
        (WebCore::DeviceOrientationData::compassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::compassAccuracy): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassAccuracy): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationData.h:
        * dom/DeviceOrientationEvent.idl: Added iOS-specific code.
        * dom/Document.cpp: Moved constant cLayoutScheduleThreshold to Settings.cpp and renamed it
        layoutScheduleThreshold towards allowing a port to configure the layout interval.
        (WebCore::Document::Document): Added optional argument isSynthesized, defaults false.
        (WebCore::Document::~Document): Added iOS-specific code to destroy the device motion
        and device orientation controllers.
        (WebCore::Document::didBecomeCurrentDocumentInFrame): Added iOS-specific code with FIXME comment.
        (WebCore::Document::prepareForDestruction): Added iOS-specific touch event code.
        (WebCore::Document::removeAllEventListeners): Ditto.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added; compiles to an empty function on
        non-iOS port.
        (WebCore::Document::suspendActiveDOMObjects): Modified to call platformSuspendOrStopActiveDOMObjects().
        (WebCore::Document::resumeActiveDOMObjects): Ditto.
        (WebCore::Document::stopActiveDOMObjects): Added.
        (WebCore::Document::implicitClose): Modified to query Settings::layoutInterval().
        (WebCore::Document::minimumLayoutDelay): Ditto.
        (WebCore::Document::processViewport): Added iOS-specific code.
        (WebCore::Document::updateViewportArguments): Ditto.
        (WebCore::setParserFeature): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processFormatDetection): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processWebAppOrientations): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::setIsTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::initSecurityContext): Added iOS-specific code.
        (WebCore::Document::suspendScheduledTasks): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::deviceMotionController): Added; iOS-specific.
        (WebCore::Document::deviceOrientationController): Added; iOS-specific.
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        * dom/Document.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        (WebCore::Document::isSynthesized): Added.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added.
        * dom/Document.idl:
        * dom/DocumentMarker.h: Added iOS-specific changes. We should look to reconcile the differences between
        iOS and OpenSource. See <rdar://problem/11306422>.
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        (WebCore::DocumentMarker::DocumentMarker): Added; iOS-specific.
        (WebCore::DocumentMarker::alternatives): Added; iOS-specific.
        (WebCore::DocumentMarker::setAlternative): Added; iOS-specific.
        (WebCore::DocumentMarker::metadata): Added; iOS-specific.
        (WebCore::DocumentMarker::setMetadata): Added; iOS-specific.
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::shiftMarkers):
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        (WebCore::Element::focus): Add iOS-specific workaround for <rdar://problem/6699741>.
        * dom/Element.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        * dom/EventContext.cpp: Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        * dom/EventContext.h: Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Ditto.
        (WebCore::EventDispatcher::dispatchEvent): Ditto.
        (WebCore::EventPath::EventPath): Ditto.
        * dom/EventNames.h: Added events webkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}
        and gesture{change, end, start}.
        * dom/EventNames.in: Added event names GestureEvent and WebKitPlaybackTargetAvailabilityEvent conditioned on
        the macro defines ENABLE_IOS_GESTURE_EVENTS and ENABLE_IOS_AIRPLAY.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsScrollOffset): Added iOS-specific code.
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom): Ditto.
        (WebCore::Node::isDescendantOf): Fixed style issue in function prototype; moved '*' to the left side.
        (WebCore::Node::isDescendantOrShadowDescendantOf): Added.
        (WebCore::tryAddEventListener): Added iOS-specific code; also added FIXME comment.
        (WebCore::tryRemoveEventListener): Ditto.
        (WebCore::Node::dispatchEvent): Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        (WebCore::Node::defaultEventHandler): Added iOS-specific code.
        (WebCore::Node::willRespondToMouseMoveEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseClickEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseWheelEvents): Added.
        * dom/Node.h:
        * dom/Position.h:
        (WebCore::operator<): Added.
        (WebCore::operator>): Added.
        (WebCore::operator>=): Added.
        (WebCore::operator<=): Added.
        * dom/Range.cpp:
        (WebCore::Range::create): Added iOS-specific code; also added FIXME comment.
        (WebCore::intervalsSufficientlyOverlap): Added; guarded by PLATFORM(IOS).
        (WebCore::printRects): Added; guarded by PLATFORM(IOS).
        (WebCore::adjustLineHeightOfSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::coalesceSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::Range::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        * dom/Range.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): Added iOS-specific code.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Ditto.
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Ditto.
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): Ditto.
        (WebCore::setViewportFeature): Added iOS-specific code.
        (WebCore::finalizeViewportArguments): Added; iOS-specific.
        * dom/ViewportArguments.h:
        * dom/make_names.pl: Added support to find the path to gcc with respect to the environment
        variable SDKROOT.
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::suspend):
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize setting m_layoutInterval to layoutScheduleThreshold.
        (WebCore::Settings::setLayoutInterval): Added.
        * page/Settings.h:
        (WebCore::Settings::layoutInterval): Added.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the Windows build after r160672.
        
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Apply overhang shadow and linen to UI-side layers
        https://bugs.webkit.org/show_bug.cgi?id=125807

        Reviewed by Tim Horton.
        
        With UI-side compositing, we need to apply the overhang shadow and linen
        background to layers in the UI process. Achieve this by setting a "custom
        appearance" flag on layers that need a shadow or linen background, and
        migrating this flag to the UI process. Static functions on ScrollbarThemeMac
        are exposed to do the actual setting.

        * WebCore.exp.in: Export ScrollbarThemeMac and GraphicsLayerCA functions.
        * WebCore.xcodeproj/project.pbxproj: ScrollbarThemeMac.h and ScrollbarThemeComposite.h
        need to be Private.
        * platform/graphics/GraphicsLayer.cpp: Initialize m_customAppearance.
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h: Getter/setter for CustomAppearance.
        (WebCore::GraphicsLayer::setCustomAppearance):
        (WebCore::GraphicsLayer::customAppearance):
        * platform/graphics/ca/GraphicsLayerCA.cpp: Update CustomAppearanceChanged as
        we do other properties.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCustomAppearance):
        (WebCore::GraphicsLayerCA::setCustomAppearance):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: When we have a custom
        appearance, use ScrollbarThemeMac functions to update the layer. Ensure
        that if the bounds change, we update the shadow (whose path depends on the bounds).
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::setBounds):
        (PlatformCALayerMac::requiresCustomAppearanceUpdateOnBoundsChange):
        (PlatformCALayerMac::updateCustomAppearance):
        * platform/mac/ScrollbarThemeMac.h: Export some static functions.
        * platform/mac/ScrollbarThemeMac.mm: Change code to use static functions.
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreasLayerContents):
        (WebCore::ScrollbarThemeMac::setUpContentShadowLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): No need to call
        setUpContentShadowLayer() now when size changes; PlatformCALayer takes
        care of that.
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): Now set
        custom appearance via GraphicsLayer.

2013-12-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove dead code after converstion to VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125795

        Reviewed by Darin Adler.

        * WebCorePrefix.h: Remove VS2012 include kludge.
        * loader/FTPDirectoryParser.cpp: Remove gmtime workaround code.
        * page/DOMWindow.cpp: Remove older pointer-based open implementation.
        * page/DOMWindow.h: Ditto
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal): Remove optimization bug workaround
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend): Remove compiler workaround

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/history changes
        https://bugs.webkit.org/show_bug.cgi?id=125769

        Reviewed by Darin Adler.

        * history/BackForwardClient.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::current): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::setCurrent): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::clearAllPageCaches): Added; guarded by PLATFORM(IOS).
        * history/BackForwardList.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Added iOS-specific code.
        (WebCore::CachedFrame::CachedFrame): Ditto.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Ditto.
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Ditto.
        * history/HistoryItem.h:
        (WebCore::HistoryItem::scale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::scaleIsInitial): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setScale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::viewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setViewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::bookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setBookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::sharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setSharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision): Added iOS-specific code.
        (WebCore::logCanCachePageDecision): Ditto.
        (WebCore::PageCache::canCachePageContainingThisFrame): Ditto.
        (WebCore::PageCache::canCache): Ditto.
        (WebCore::PageCache::pruneToCapacityNow): Added.
        * history/PageCache.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/svg changes
        https://bugs.webkit.org/show_bug.cgi?id=125784

        Reviewed by Darin Adler.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::willRespondToMouseClickEvents): Added.
        * svg/SVGAElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute): Added attribute listeners for touch{cancel, end, move, start},
        and gesture{change, end, start}.

2013-12-13  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Cache partitioning asserts when associated NSURLRequest is nil
        https://bugs.webkit.org/show_bug.cgi?id=125716

        Reviewed by Darin Adler.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2013-12-16  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Fix a few bugs with opening an IDB connection
        https://bugs.webkit.org/show_bug.cgi?id=125798

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::processPendingCalls): As the comment says, we should only
          early return when there *are* pending delete calls. The logic here was backwards,
          preventing the backend from ever getting to processPendingOpenCalls().

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        Added correct PlatformToolset for 64-bit builds.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Package up some data about scrollability into a struct for use in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=125792

        Reviewed by Beth Dakin.

        Both scrolling state nodes and scrolling nodes share a set of parameters
        relating to scrollability and rubberbanding, so package them into a struct
        for re-use. Send the struct wholesale to the scrolling thread.

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollableAreaParameters::ScrollableAreaParameters): New struct.
        (WebCore::ScrollableAreaParameters::operator==):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): Reordering.
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin): Moved.
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters): Set the parameters all at once.
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        * page/scrolling/ScrollingStateScrollingNode.h: Getters access the struct. Reorder member variables.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollOrigin):
        (WebCore::ScrollingTreeScrollingNode::horizontalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::verticalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledVerticalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::canHaveScrollbars):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Removed setScrollParametersForNode().
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated): Set the params in this
        function. Reordering.

2013-12-16  Sam Weinig  <sam@webkit.org>

        CTTE: Convert more of SVG to use references
        https://bugs.webkit.org/show_bug.cgi?id=125762

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::removeClientFromCache):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::invalidateFilterPrimitiveParent):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):
        (WebCore::SVGFilterPrimitiveStandardAttributes::primitiveAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::svgAttributeChanged):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2013-12-16  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add support for the computing the included intervals for a BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124605

        Reviewed by Andreas Kling.

        Setting shape-inside to content-box now works.

        Changed FloatRoundedRect::xInterceptsAtY() to include the bottom edge of
        the rectangle and to check for the special cases where any or all of the
        corner radii are empty.

        Test: fast/shapes/shape-inside/shape-inside-content-box.html

        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getIncludedIntervals): Replaced the stub implementation with logic that's similar to getExcludedIntervals().
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Removed a meaningless assert.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for more WAI-ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=125596

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with the proper AtkRoles, some of
        them to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Eric Carlson  <eric.carlson@apple.com>

        Fix QuickTime plug-in replacement scripting bugs
        https://bugs.webkit.org/show_bug.cgi?id=125717

        Reviewed by Sam Weinig.

        No new tests, existing test updated.

        * Modules/plugins/QuickTimePluginReplacement.js:
        (Replacement): Change '' to "" to avoid "Empty character constant" warning when creating
            Derived Sources.
        (Replacement.prototype.createVideoElement): Handle qtsrc attribute. Remember base url.
        (Replacement.prototype.setURL): Resolve urls relative to base.

2013-12-15  Darin Adler  <darin@apple.com>

        Catch callers who forget to use initializeStyle
        https://bugs.webkit.org/show_bug.cgi?id=125763

        Reviewed by Andreas Kling.

        A recent fix was because a caller used setStyle first rather than using
        initializeStyle. This patch adds an assertion to catch cases where we do
        that so we see the mistake right away instead of indirectly later.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle): Simplified an assertion.
        (WebCore::RenderElement::setStyle): Added an assertion that m_hasInitializedStyle
        is true, with an exception for RenderView, which needs to be created before we
        have the correct style computed for it (at least for now). Also broke out an
        assertion that was using &&, since we would prefer to know which clause failed,
        making separate assertions more useful than a combined assertion.

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_CHECK_MENU_ITEM
        https://bugs.webkit.org/show_bug.cgi?id=125594

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with checkmenuitem role with the
        proper AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_ARTICLE
        https://bugs.webkit.org/show_bug.cgi?id=125587

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with article role with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-27  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix the preferred logical widths code to work with spanning grid items
        https://bugs.webkit.org/show_bug.cgi?id=123994

        Reviewed by Andreas Kling.

        From Blink r159189 by <jchaffraix@chromium.org>

        There was no definition in the specs for the intrinsic / preferred
        logical widths on the grid element. The following was proposed to
        the WG and later accepted:
        - The sum of the grid tracks' UsedBreadth is the minimum logical width
        - The sum of the grid tracks' MaxBreadth is the maximum logical width

        http://lists.w3.org/Archives/Public/www-style/2013Oct/0054.html
        for more information.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        * rendering/RenderGrid.h:

2013-12-15  Frédéric Wang  <fred.wang@free.fr>

        Add support for maction@toggle
        https://bugs.webkit.org/show_bug.cgi?id=120059

        Reviewed by Chris Fleizach.

        Test: mathml/presentation/maction-toggle.html

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedChildAndIndex):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::defaultEventHandler):
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:

2013-12-15  Darin Adler  <darin@apple.com>

        More nullptr in RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=125764

        Reviewed by Andreas Kling.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::uncachedFirstLineStyle):
        (WebCore::RenderElement::updateShapeImage):
        (WebCore::RenderElement::destroyLeftoverChildren):
        (WebCore::RenderElement::findNextLayer):
        Use nullptr in a few more places.

2013-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: 2x regression on Dromaeo DOM query tests
        https://bugs.webkit.org/show_bug.cgi?id=125377

        Reviewed by Filip Pizlo.

        The bug was caused by JSC not JIT'ing property accesses on document because of its having
        custom named getter (named properties).  This resulted in resolution of methods on document
        such as getElementById to happen inside the interpreter.

        Fixed the bug by using the new JSC type info flag which tells JSC to JIT property access on
        document, and then notifying JSC whenever a new named property appeared on document.

        Tests: js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::addImpureProperty): Wraps VM::addImpureProperty.
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Added the support for NewImpurePropertyFiresWatchpoints.
        * bindings/scripts/IDLAttributes.txt: Ditto.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem): Calls addImpureProperty.
        * html/HTMLDocument.idl: Added NewImpurePropertyFiresWatchpoints.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [WIn] Unreviewed build fix after r160599

        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState): RenderObject::theme now returns
        a reference.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [Win] Unreviewed build fix

        The build system continues to attempt to build QTMovieWin, even
        though it is excluded from the build solution. I'm actually
        removing the project files to prevent this.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Removed.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.filters: Removed.

2013-12-15  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] shape-outside animation does not handle 'auto' well
        https://bugs.webkit.org/show_bug.cgi?id=125700

        Reviewed by Dirk Schulze.

        Handle the case where we are blending/animating with a null ShapeValue due to 'auto'.

        Adapted LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html for testing this.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2013-12-15  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=125742

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2013-12-14  Darin Adler  <darin@apple.com>

        Crash in CSSImageGeneratorValue and RenderScrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125702

        Reviewed by Alexey Proskuryakov.

        This crash had two causes at two different levels. The crash fixes both.

        At the RenderScrollbar level, we were setting up a new renderer, a
        RenderScrollbarPart, and never calling initializeStyle. This meant that
        we did not do proper style setup, which meant we did not end up calling
        CSSImageGeneratorValue::addClient and so had a removeClient that was not
        properly balanced by an addClient. This is the primary bug.

        At the CSSImageGeneratorValue level, the addClient and removeClient
        functions were not properly handling possibly-mismatched calls. It was
        easy to fix the functions to work even if the calls are not perfectly
        matched up, which makes the consequences of a missed addClient call
        much less dire, no longer messing up reference counting. Fixing this
        mitigates the risk if we made this same mistake elsewhere, although I
        could not find any other places with some quick searches.

        Test: fast/css/scrollbar-image-crash.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient): Only call ref if this will
        add the first client.
        (WebCore::CSSImageGeneratorValue::removeClient): Only call deref if this
        removes the last client. Also added an assertion that can fire if we call
        removeClient without first calling addClient, which is illegal. However,
        the function handles that case without over-deref'ing itself.

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart): Simplify the logic for
        needRenderer a bit. Use initializeStyle rather than setStyle when first
        creating the RenderScrollbarPart. Also use add and take properly so we
        don't do extra hash lookups the old code did with get/set and get/remove.

2013-12-14  Sam Weinig  <sam@webkit.org>

        CTTE: SVGResourcesCache::cachedResourcesForRenderObject() should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=125743

        Reviewed by Dan Bernstein.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions):
        (WebCore::RenderSVGShape::markerRect):
        (WebCore::RenderSVGShape::drawMarkers):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources):
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles):

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

        Clean up the project after r160487

        * WebCore.xcodeproj/project.pbxproj: Moved reference to Security.framework from the top
        level of the project to the Frameworks group, and made it SDK-relative.

2013-12-14  Andreas Kling  <akling@apple.com>

        Page::theme() should return a reference.
        <https://webkit.org/b/125737>

        There's always a RenderTheme, and not a single call site was checking
        for null pointers anyway. Updated RenderObject::theme() as well.

        Reviewed by Antti Koivisto.

2013-12-13  Sam Weinig  <sam@webkit.org>

        CTTE: Convert Element and RenderObject iterator usage to use range-based for loops
        https://bugs.webkit.org/show_bug.cgi?id=125731

        Reviewed by Andreas Kling.

        Perform straight forward conversions. A few stragglers that do odd things remain.

2013-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Small string improvements to JSInjectedScriptHost::type and other bindings
        https://bugs.webkit.org/show_bug.cgi?id=125722

        Reviewed by Timothy Hatcher.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::type):
        Use SmallStrings, jsNontrivialString and ASCIILiteral.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::type):
        Use jsNontrivialString.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::stringValue):
        Use jsNontrivialString and ASCIILiteral.

2013-12-14  Andreas Kling  <akling@apple.com>

        Move a couple of inlines from RenderObject to RenderElement.
        <https://webkit.org/b/125734>

        Take most of the inline functions on RenderObject that call style()
        and move them over to RenderElement where style() is branchless.

        Reviewed by Antti Koivisto.

2013-12-14  Andreas Kling  <akling@apple.com>

        RenderElement::rendererForRootBackground() should return a reference.
        <https://webkit.org/b/125735>

        This function always finds a renderer to return.

        Reviewed by Antti Koivisto.

2013-12-14  Mark Rowe  <mrowe@apple.com>

        Build fix after r160557.

        * Configurations/WebCore.xcconfig: Find JavaScriptCore.framework below SDKROOT so that we'll pick
        up the built version in production builds rather than the system version.

2013-12-14  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Use GMutexLocker instead of g_mutex_lock
        https://bugs.webkit.org/show_bug.cgi?id=125588

        Reviewed by Philippe Normand.

        No new tests because this is just code simplification.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockBufferMutex):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStart):

2013-12-13  Andreas Kling  <akling@apple.com>

        Move RenderObject::repaintAfterLayoutIfNeeded() to RenderElement.
        <https://webkit.org/b/125712>

        This function is only ever called on RenderElements, so move it there.
        Removes some RenderObject::style() branchiness.

        Reviewed by Darin Adler.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move Inspector and Debugger protocol domains into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125707

        Reviewed by Timothy Hatcher.

          - Switch TypeBuilder::Page::SearchMatch to TypeBuilder::GenericTypes::SearchMatch
            which comes from InspectorJSTypeBuilders.
          - Remove domains that moved to JavaScriptCore.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        Add new files.

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResource):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:
        Update includes and type builder type names.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        Use the new getEnum function names.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove pre-VS2013 support code.
        https://bugs.webkit.org/show_bug.cgi?id=125693

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota): Use C99 format arguments
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine): Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIcons): Ditto 
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize): Ditto

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        SVG bindings are improperly being generated with "fastGetAttribute"
        https://bugs.webkit.org/show_bug.cgi?id=125670

        Reviewed by Darin Adler.

        A bug was introduced in r152845 that improperly called the
        IsSVGAnimatedType using the $attribute hash, rather than the
        expected $attribute->signature->type.

        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression): Clean up attribute type confusion.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCore.vcxproj: Exclude MediaPlayerPrivateQuickTimeVisualContext from
        Windows build.
        * platform/graphics/MediaPlayer.cpp: Don't use QuickTime as the PlatformMediaEngine.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        [GTK] Remove Warnings in building about duplicate INSPECTOR variables
        https://bugs.webkit.org/show_bug.cgi?id=125710

        Reviewed by Tim Horton.

        * GNUmakefile.am:

2013-12-13  Roger Fong  <roger_fong@apple.com>

        [WebGL] Check for global variable precision mismatch between vertex and fragment shaders.
        https://bugs.webkit.org/show_bug.cgi?id=125546.
        <rdar://problem/15203364>

        Reviewed by Brent Fulgham.

        Covered Khronos conformances tests:
        webgl/1.0.2/glsl/misc/shader-with-global-variable-precision-mismatch.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/GraphicsContext3D.h: Rename areProgramSymbolsValid since it currently only serves one purpose.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCoreGenerated.vcxproj: Specify that we are
        using the vs120_xp build target for Makefile-based projects.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Inspector Code Generation to JavaScriptCore for Runtime Domain
        https://bugs.webkit.org/show_bug.cgi?id=125595

        Reviewed by Timothy Hatcher.

          - CodeGeneration changed to output Frontend and Backend dispatchers
            in namespace Inspector. So update all the agent's appropriately.
          - Update Derived Sources code generation to use the Scripts that had
            moved to JavaScriptCore. Some ports just use JSC/inspector/scripts
            directly, but others have to use the Scripts exported by JSC
            in JavaScriptCore's PrivateHeaders.
          - Add ForwardingHeaders for the files generated in JavaScriptCore.
          - Update the names of Inspector DerivedSources files, since they
            were renamed to InspectorWeb*.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/InspectorJSBackendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSFrontendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSTypeBuilders.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files, rename files, update code generation.

        * make-generated-sources.sh:
        Update this standalone developer script to fill in the new InspectorScripts variable.

        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptCallFrame.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:
        Updates header names and class namespace changes.

2013-12-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding RTCPeerConnectionErrorCallback
        https://bugs.webkit.org/show_bug.cgi?id=125574

        Reviewed by Eric Carlson.

        According to the spec there should be a RTCPeerConnectionErrorCallback function type for createOffer/Answer,
        setLocal/RemoteDescription and updateIce function calls. This callback must handle a DOMError object.

        Existing tests were updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::addIceCandidate):
        * Modules/mediastream/RTCErrorCallback.h: Removed.
        * Modules/mediastream/RTCErrorCallback.idl: Removed.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionErrorCallback.h: Added.
        * Modules/mediastream/RTCPeerConnectionErrorCallback.idl: Added.
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp:
        (WebCore::RTCSessionDescriptionRequestImpl::create):
        (WebCore::RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl):
        (WebCore::RTCSessionDescriptionRequestImpl::requestFailed):
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCVoidRequestImpl.cpp:
        (WebCore::RTCVoidRequestImpl::create):
        (WebCore::RTCVoidRequestImpl::RTCVoidRequestImpl):
        (WebCore::RTCVoidRequestImpl::requestFailed):
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::RTCPeerConnectionHandler::incompatibleConstraintsErrorName):
        (WebCore::RTCPeerConnectionHandler::invalidSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::incompatibleSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::internalErrorName):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::SessionRequestNotifier::SessionRequestNotifier):
        (WebCore::SessionRequestNotifier::fire):
        (WebCore::VoidRequestNotifier::VoidRequestNotifier):
        (WebCore::VoidRequestNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):
        (WebCore::RTCPeerConnectionHandlerMock::createAnswer):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch WebKit solution to Visual Studio 2013
        https://bugs.webkit.org/show_bug.cgi?id=125192

        Reviewed by Anders Carlsson.

        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Ditto

2013-12-13  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto Key.usages should be ordered alphabetically
        https://bugs.webkit.org/show_bug.cgi?id=125696

        Reviewed by Darin Adler.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::usages): Do it.

2013-12-13  Darin Adler  <darin@apple.com>

        Make some optimizations for DOM bindings involving vectors
        https://bugs.webkit.org/show_bug.cgi?id=125680

        Reviewed by Andreas Kling.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Removed unnecessary copying of vectors when converting them
        to JavaScript values.
        (WebCore::toRefPtrNativeArray): Use reserveInitialCapacity and uncheckedAppend.
        (WebCore::toNativeArray): Ditto.
        (WebCore::toNativeArguments): Ditto.

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r155784): [GTK] Some methods incorrectly removed in r155784 and deprecated in r158662
        https://bugs.webkit.org/show_bug.cgi?id=125692

        Reviewed by Martin Robinson.

        In r155784 the build was fixed by skipping Console::profile() and
        Console::profileEnd(), but the patch also skipped other methods
        containing the profile method name. Those were incorrectly
        deprecated in r158662 thinking that the property had been removed
        in the idl.

        * bindings/gobject/WebKitDOMDeprecated.cpp: Undeprecate
        webkit_dom_html_head_element_get_profile and
        webkit_dom_html_head_element_set_profile.
        * bindings/gobject/WebKitDOMDeprecated.h: Ditto.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip webkit_dom_console_profile and
        webkit_dom_console_profile_end.

2013-12-13  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Darin Adler.

        From the Blink port of this bug it becomes clear that svg/dom/SVGScriptElement/script-set-href.svg and
        svg/dom/svg-element-attribute-js-null.xhtml still hit an assert in Debug because SVGNames::typeAttr can't
        be used with fastGetAttribute in all cases, because it can be animatable. However for SVGScriptElement
        it is not animatable, so make isAnimatableAttribute virtual (note Debug only method) and allow typeAttr
        in the SVGScriptElement case to be useable for fastGetAttribute.

        Test: svg/dom/SVGScriptElement/script-type-attribute.svg

        * svg/SVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isAnimatableAttribute):
        * svg/SVGScriptElement.h:

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose also webkit_dom_document_get_url
        https://bugs.webkit.org/show_bug.cgi?id=125691

        Reviewed by Martin Robinson.

        For some reason we expose the URL property, so it can be accessed
        with g_object_get(), but we have a special case to not provide a
        public getter.

        * bindings/gobject/webkitdom.symbols: Add new symbol.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunctions): Remove the special case of URL property.

2013-12-13  Andreas Kling  <akling@apple.com>

        CSSFilterImageValue constructor should require both image and filter.
        <https://webkit.org/b/125056>

        Make the CSSFilterImageValue::create() helper take both the image and
        filter CSSValues by PassRef since they should never be null.

        Tweaked ComputedStyleExtractor::valueForFilter() to return a PassRef
        for this to work.

        Reviewed by Anders Carlsson.

2013-12-12  Andreas Kling  <akling@apple.com>

        StyleResolver::adjustRenderStyle() should take RenderStyle references.
        <https://webkit.org/b/125623>

        This function doesn't handle null styles being passed, so prevent
        it at compile time.

        Reviewed by Anders Carlsson.

2013-12-13  Darin Adler  <darin@apple.com>

        Eliminate awkward virtualComputedStyle construction
        https://bugs.webkit.org/show_bug.cgi?id=125681

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Tweak coding style a bit.

        * dom/Element.h: Marked computedStyle virtual and got rid of virtualComputedStyle.
        This fixes a bug that we would not call SVGElement::computedStyle if we called
        it through an Element pointer or reference. Not sure how to get test coverage for this.

        * dom/Node.cpp:
        (WebCore::Node::computedStyle): Use a loop instead of recursive virtual calls.

        * dom/Node.h: Made computedStyle virtual and got rid of virtualComputedStyle.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::computedStyle): Tweak coding style a bit.

        * svg/SVGElement.h: Made computedStyle virtual (and FINAL) and got rid fo
        virtualComputedStyle.

2013-12-13  Darin Adler  <darin@apple.com>

        Fix a couple stray uses of RefPtr that should release
        https://bugs.webkit.org/show_bug.cgi?id=125679

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter): Add calls to release, in
        one case rearranging the order of operations slightly so we
        don't release the pointer before using it.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto wrapKey operation doesn't check key usage
        https://bugs.webkit.org/show_bug.cgi?id=125675

        Reviewed by Darin Adler.

        Tests: crypto/subtle/unwrapKey-check-usage.html
               crypto/subtle/wrapKey-check-usage.html

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Added accidentally omitted code. Other operations are fine.

2013-12-12  Darin Adler  <darin@apple.com>

        Make some improvements in CSSImageGeneratorValue code
        https://bugs.webkit.org/show_bug.cgi?id=125676

        Reviewed by Simon Fraser.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque): Take a reference to the CSSValue, since
        it's known not to be null. Used checked cast.
        (WebCore::CSSCrossfadeValue::knownToBeOpaque): Updated to pass a reference.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Use
        make_unique instead of adoptPtr.
        (WebCore::CSSImageGeneratorValue::subimageIsPending): Use checked cast.
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue): Ditto, also
        use nullptr.

        * css/CSSImageGeneratorValue.h: Removed unneeded includes, added some forward
        declarations, used unique_ptr instead of OwnPtr, and used CSS_VALUE_TYPE_CASTS
        macro to create cast functions.

        * css/CSSValue.cpp: Removed unneeded include of CSSImageGeneratorValue.h.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear): Use nullptr instead of 0.
        (WebCore::StyleResolver::applyProperty): Use checked cast and pass references
        instead of pointers to StyleGeneratedImage::create.
        (WebCore::StyleResolver::styleImage): Use checked cast and pass references
        instead of pointers to generatedOrPendingFromValue.
        (WebCore::StyleResolver::generatedOrPendingFromValue): Take the value as a
        reference instead of a pointer.
        (WebCore::StyleResolver::loadPendingImage): Pass a refernece instead of a
        pointer to StyleGeneratedImage::create.
        (WebCore::StyleResolver::loadPendingImages): Use auto for iteration instead of
        a lot type name.

        * css/StyleResolver.h: Changed generatedOrPendingFromValue to take the value
        as a reference instead of a pointer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter): Pass a reference insted of a pointer to
        StyleGeneratedImage::create.
        (WebCore::crossfadeBlend): Ditto.
        (WebCore::blendFunc): Ditto. Also use references for local variables.

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::StyleGeneratedImage): Use PassRef instead of
        PassRefPtr for the argument type.
        (WebCore::StyleGeneratedImage::cssValue): Updated since m_imageGeneratorValue
        is now a Ref instead of a RefPtr. Sadly this requires a const_cast that we can
        come back and get rid of later.
        (WebCore::StyleGeneratedImage::imageSize): Ditto.
        (WebCore::StyleGeneratedImage::image): Ditto.

        * rendering/style/StyleGeneratedImage.h: Changed create function and constructor
        to take a PassRef. Made imageValue non-const since it returns a non-const value,
        to be consistent with "conceptual const". Changed m_imageGeneratorValue to be a
        Ref instead of a RefPtr.

        * rendering/style/StyleImage.h: Made WrappedImagePtr be const void*, since it's
        a pointer used only for equality checks. Not a great idiom, but fine to use a
        const pointer instead of non-const, and avoids the const_cast we'd otherwise
        need in StyleGeneratedImage::data.

2013-12-12  KyungTae Kim  <ktf.kim@samsung.com>

        Improve the find word boundary performance
        https://bugs.webkit.org/show_bug.cgi?id=125619

        In endWordBoundary case, the textBreakPrevious call in findWordBoundary is unnecessary.
        So use separate function for endWordBoundary can improve the performance.

        Reviewed by Darin Adler.

        No tests because no operation changes.

        * editing/VisibleUnits.cpp: Use findEndWordBoundary in endWordBoundary
        (WebCore::endWordBoundary):
        * platform/text/TextBoundaries.cpp: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):
        * platform/text/TextBoundaries.h:
        * platform/text/mac/TextBoundaries.mm: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):

2013-12-12  Benjamin Poulain  <bpoulain@apple.com>

        Fix a silly mistake of r160467
        https://bugs.webkit.org/show_bug.cgi?id=125657

        Reviewed by Alexey Proskuryakov.

        Fix a typo. The validity check was missing the logical not.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):

2013-12-12  Tim Horton  <timothy_horton@apple.com>

        [wk2] Handle pinch-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=125604

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some TransformationMatrix functions.

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private so that RenderLayerCompositor/Backing can be used from WebKit2.

        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerForContentShadow):
        Add a getter for the content shadow layer.

2013-12-12  Brady Eidson  <beidson@apple.com>

        DatabaseProcess IndexedDB: Establish a metadata backing store on disk
        https://bugs.webkit.org/show_bug.cgi?id=125258

        Reviewed by Alexey Proskuryakov, Anders Carlsson, and Tim Horton.

        Teach CrossThreadCopier how to handle IDBDatabaseMetadata.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseMetadata.cpp: Added.
        (WebCore::IDBDatabaseMetadata::isolatedCopy):
        (WebCore::IDBObjectStoreMetadata::isolatedCopy):
        (WebCore::IDBIndexMetadata::isolatedCopy):
        * Modules/indexeddb/IDBDatabaseMetadata.h:

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::isolatedCopy):
        * Modules/indexeddb/IDBKeyPath.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy): Add an IDBDatabaseMetadata specialization.
        * platform/CrossThreadCopier.h:

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Build fix.

        * crypto/CommonCryptoUtilities.h: Declare a newly used private constant.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/rsaes-pkcs1-v1_5-decrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-wrap-unwrap-aes.html

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        Removed meaningless parameters arguments from private functions. The base arguments
        class is always empty.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::~CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::create):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::identifier):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h: Added.
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Added support for this algorithm.

2013-12-12  Andreas Kling  <akling@apple.com>

        [Mac] Stop not caching HTTP resources with "Vary" header in response.
        <https://webkit.org/b/125483>
        <rdar://problem/11781097>

        Remove the workaround preventing resources with the "Vary" header
        from going into cache, as the CFNetwork cache has supported this
        for quite a while now.

        31.5 MB progression on Membuster3, because we can now mmap those
        resources from disk once they are in the cache.

        We keep the workaround on PLATFORM(WIN) for now.

        Reviewed by Antti Koivisto.

2013-12-12  Sam Weinig  <sam@webkit.org>

        Replace uses of WTF::BitArray with std::bitset
        https://bugs.webkit.org/show_bug.cgi?id=125642

        Reviewed by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStyleProperties):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Public key in a generated KeyPair should always be extractable
        https://bugs.webkit.org/show_bug.cgi?id=125643

        Reviewed by Sam Weinig.

        The spec doesn't explain how generateKey works with key pairs (there are open bugs
        about that). Making public keys non-extractable makes no sense one way or another.

        Test: crypto/subtle/rsa-oaep-generate-non-extractable-key.html

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::generatePair):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make algorithm.name return registered name, not normalized one
        https://bugs.webkit.org/show_bug.cgi?id=125641

        Reviewed by Anders Carlsson.

        Currently, WebCrypto editor's draft stipulates that algorithm name is lowercased
        as part of normalization.

        But it makes little sense to register algorithms as mixed (mostly upper) case, yet
        return the name lowercased. Other implementations don't bother respecting this,
        and signs are that the spec will change.

        I'd like to match other implementations here, because sticking to the spec only
        makes us fail 3rd party test suites for no good reason.

        Updated many existing tests.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:

2013-12-12  Csaba Osztrogonác  <ossy@webkit.org>

        Move CertificateInfo to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124720

        Reviewed by Darin Adler.

        Based on the patch by Kwang Yul Seo <skyul@company100.net>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/CertificateInfo.h: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificateChain): Added, because WebCoreArgumentCoders needs it.
        * platform/network/mac/CertificateInfoMac.mm: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.mm.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersMac.mm.
        * platform/network/soup/CertificateInfo.cpp: Copied from Source/WebKit2/Shared/WebCertificateInfo.h.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersSoup.cpp.
        * platform/network/soup/CertificateInfo.h: Renamed from Source/WebKit2/Shared/soup/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificate): Added, because WebCoreArgumentCoders needs it.
        (WebCore::CertificateInfo::setTLSErrors): Added, because WebCoreArgumentCoders needs it.

2013-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160417.
        http://trac.webkit.org/changeset/160417
        https://bugs.webkit.org/show_bug.cgi?id=125629

        The patch is causing crashes (Requested by zdobersek1 on
        #webkit).

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper):

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Carlos Garcia Campos

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.
        We should expose the BatteryManager and the text and audio tracks.

        * Modules/battery/BatteryManager.idl:
        * html/HTMLMediaElement.idl:

2013-12-11  Darin Adler  <darin@apple.com>

        StylePendingImage needs to correctly manage the CSSValue pointer lifetime
        https://bugs.webkit.org/show_bug.cgi?id=125468

        Reviewed by Andreas Kling.

        Test: fast/css/pending-image-crash.xhtml

        Disconnect the reference counted StylePendingImage from the CSSValue that owns
        it when it's not needed any more, otherwise we could end up using a pointer
        that might no longer be valid.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image if it is a StylePendingImage.
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue): Call detachPendingImage.
        (WebCore::CSSCursorImageValue::cachedImage): Call detachPendingImage before changing
        m_image to a new value.
        (WebCore::CSSCursorImageValue::clearCachedImage): Ditto.
        * css/CSSCursorImageValue.h: Added detachPendingImage.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image set if it is a StylePendingImage.
        (WebCore::CSSImageSetValue::~CSSImageSetValue): Call detachPendingImage.
        (WebCore::CSSImageSetValue::cachedImageSet): Call detachPendingImage before changing
        m_imageSet to a new value.
        * css/CSSImageSetValue.h: Added detachPendingImage.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::detachPendingImage): Added. Calls detachFromCSSValue on the
        current image if it is a StylePendingImage.
        (WebCore::CSSImageValue::~CSSImageValue): Call detachPendingImage.
        (WebCore::CSSImageValue::cachedImage): Call detachPendingImage before changing m_image
        to a new value.
        * css/CSSImageValue.h: Added detachPendingImage.

        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::cssImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageGeneratorValue): Added a null check.
        (WebCore::StylePendingImage::cssCursorImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageSetValue): Added a null check.
        (WebCore::StylePendingImage::detachFromCSSValue): Added. Sets m_value to null since
        the style is no longer using this StylePendingImage.
        (WebCore::StylePendingImage::data): Changed to use the "this" pointer since all we
        need is some arbitrary pointer uniquely identifying the image. Before loading the image,
        we have no suitable weak identifier, so it suffices to use the unique pointer to each
        StylePendingImage object. This function is used only in a limited way; it would be nice
        to find a way to make the code less strange long term.

2013-12-11  Darin Adler  <darin@apple.com>

        Remove some unneeded code noticed while looking at StylePendingImage
        https://bugs.webkit.org/show_bug.cgi?id=125618

        Reviewed by Andreas Kling.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage): Removed redundant function calls.

        * rendering/RenderImageResource.cpp: Removed unneeded nullImage and
        usesImageContainerSize member functions.
        (WebCore::RenderImageResource::image): Use Image::nullImage directly instead of
        through RenderImageResourceImage::nullImage.

        * rendering/RenderImageResource.h: Removed unneeded usesImageContainerSize
        and nullImage functions. Also removed unneeded includes.

        * rendering/RenderImageResourceStyleImage.h: Removed unneeded
        usesImageContainerSize override. Nobody was calling it.

2013-12-11  Benjamin Poulain  <bpoulain@apple.com>

        Add the CFNetwork implementation of the asynchronous ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=124440

        Reviewed by Alexey Proskuryakov.

        Add a second subclass of ResourceHandleCFURLConnectionDelegate: ResourceHandleCFURLConnectionDelegateWithOperationQueue.
        The difference is those objects handle the network callback on a different queue.

        Some common code has been refactored in ResourceHandleCFURLConnectionDelegate to reduce duplicated code.

        The initialization of the request and connection is moved to the subclass to clean up initialization.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::~ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::connectionWasCancelled):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupConnectionScheduling):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h: Copied from Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::releaseHandle):
        (WebCore::ResourceHandleCFURLConnectionDelegate::synthesizeRedirectResponseIfNecessary):
        (WebCore::ResourceHandleCFURLConnectionDelegate::createResourceRequest):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueDidReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueShouldUseCredentialStorage):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:

2013-12-11  David Kilzer  <ddkilzer@apple.com>

        Define m_hasBadParent in InlineBox if defined(ADDRESS_SANITIZER)
        <http://webkit.org/b/125329>

        Reviewed by Darin Adler.

        No tests since this is a build fix for:

            $ ./Tools/Scripts/build-webkit --release OTHER_CFLAGS="$inherited -DADDRESS_SANITIZER=1"

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        - Replace ASSERT_DISABLED use with
          ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for m_hasBadParent.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::~InlineFlowBox):
        - Use !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED instead of
          #ifndef NDEBUG since this calls setHasBadParent().
        (WebCore::InlineFlowBox::checkConsistency):
        - Move ASSERT(!m_hasBadChildList) outside of
          #if CHECK_CONSISTENCY and change to
          ASSERT_WITH_SECURITY_IMPLICATION(!m_hasBadChildList).

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::setHasBadChildList):
        - Change #ifndef NDEBUG to
          #if !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for code using
          m_hasBadChildList.

2013-12-11  Ralph Thomas  <ralpht@gmail.com>

        [WebGL] Fix build on GL ES 2.0 targets after r160119
        https://bugs.webkit.org/show_bug.cgi?id=125541

        Reviewed by Brent Fulgham.

        GL ES 2.0 doesn't define GL_HALF_FLOAT_ARB, so pass through HALF_FLOAT_OES (which is defined for GL ES 2.0).
        This change also reverts r160324 which incorrectly defined GL_HALF_FLOAT_ARB for the Windows ANGLE target.

        No new tests, no change in functionality.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2013-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push More Inspector Required Classes Down into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125324

        Reviewed by Timothy Hatcher.

        Part 1: Push down core inspector classes.

          - Move InspectAgentBase, InspectorAgentRegistry, InspectorBackendDispatcher, InspectorValues
            down to JavaScriptCore and into the Inspector namespace.
          - Add forwarding headers for JavaScriptCore/inspector files.
          - Use the Inspector namespace where appropriate.
          - Rename InspectorBaseAgent to InspectorAgentBase for clarity.

        Part 2: Push Script wrapper classes down into JavaScriptCore/bindings.

          - Move ScriptObject and ScriptValue into JavaScriptCore but namespace Deprecated
          - Add forwarding headers
          - Use Deprecated::ScriptObject and Deprecated::ScriptValue everywhere.

        Part 3: Push Down ScriptFunctionCall

          - Move ScriptFunctionCall to JavaScriptCore/bindings into namespace Deprecated.
          - Give constructor a function to all for a different JSC::call, because
            WebCore ScriptFunctionCall's use JSMainThreadExecState when isMainThread.
          - Prefer Deprecated::ScriptFunctionCall everywhere it is used in WebCore.

        Part 4: Extract InspectorTypeBuilder helper functions

          - There is a chunk of InspectorTypeBuilder that never changes. Extract it into
            its own file, InspectorTypeBuilder.h in JSC/inspector, Inspector namespace.
          - This moves TypeBuilder from namespace WebCore to namespace Inspector
          - Rename the WebCore generated InspectorTypeBuilder to InspectorWebTypeBuilders,
            eventually the CodeGenerator script will do this for more then TypeBuilders
            and there will be "JS" TypeBuilders and "Web" TypeBuilders files.

        No new tests. No change in functionality, just moving things around.

        * CMakeLists.txt:
        * ForwardingHeaders/bindings/ScriptFunctionCall.h: Added.
        * ForwardingHeaders/bindings/ScriptObject.h: Added.
        * ForwardingHeaders/bindings/ScriptValue.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentBase.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentRegistry.h: Added.
        * ForwardingHeaders/inspector/InspectorBackendDispatcher.h: Added.
        * ForwardingHeaders/inspector/InspectorTypeBuilder.h: Added.
        * ForwardingHeaders/inspector/InspectorValues.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBAny.cpp:
        (WebCore::IDBAny::scriptValue):
        (WebCore::IDBAny::IDBAny):
        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::lowerValue):
        (WebCore::IDBKeyRange::upperValue):
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBKeyRange.h:
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessInternal):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/mediastream/CapabilityRange.cpp:
        (WebCore::scriptValue):
        (WebCore::CapabilityRange::min):
        (WebCore::CapabilityRange::max):
        * Modules/mediastream/CapabilityRange.h:
        * Modules/mediastream/MediaTrackConstraint.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * UseJSC.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::getEventListener):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::deserializeIDBValue):
        (WebCore::deserializeIDBValueBuffer):
        (WebCore::idbKeyToScriptValue):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::inspectedObject):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::functionCallHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::currentState):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        (WebCore::handleInitMessageEvent):
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptArguments):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::updateCallStack):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::runScript):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptGlobalObject.cpp: Renamed from Source/WebCore/bindings/js/ScriptObject.cpp.
        (WebCore::handleException):
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/ScriptGlobalObject.h: Copied from Source/WebCore/inspector/ScriptCallStack.h.
        (WebCore::ScriptGlobalObject::ScriptGlobalObject):
        * bindings/js/ScriptObject.h: Removed.
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObjectForHead):
        (WebCore::ScriptProfile::buildInspectorObjectForBottomUpHead):
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        (WebCore::ScriptProfiler::getHeapObjectId):
        * bindings/js/ScriptProfiler.h:
        * bindings/js/ScriptState.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore::SerializedScriptValue::serialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        * bindings/js/WorkerScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjAnyAttribute):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        * dom/CustomEvent.h:
        (WebCore::CustomEvent::detail):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::dataAsScriptValue):
        * dom/PopStateEvent.h:
        (WebCore::PopStateEvent::state):
        * dom/ScriptElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.get_raw_validator_call_text):
        (RawTypes.Object.get_array_item_raw_c_type_text):
        (RawTypes.Any.get_array_item_raw_c_type_text):
        (RawTypes.Array.get_array_item_raw_c_type_text):
        (CommandReturnPassModel.OptOutput.get_return_var_type):
        (CommandReturnPassModel.OptOutput.get_output_parameter_type):
        (TypeModel.ExactlyInt.get_input_param_type_text):
        (TypeModel.ExactlyInt.get_opt_output_type_):
        (TypeModel.init_class):
        (TypeBindings.create_named_type_declaration.Helper):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Inspector):
        (ArrayBinding.get_array_item_c_type_text):
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (InspectorFrontend_h):
        (InspectorBackendDispatchers_h):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::releaseObject):
        (WebCore::InjectedScript::wrapCallFrames):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapTable):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::findObjectById):
        (WebCore::InjectedScript::inspectNode):
        (WebCore::InjectedScript::releaseObjectGroup):
        (WebCore::InjectedScript::nodeAsScriptValue):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptBase.cpp:
        (WebCore::InjectedScriptBase::InjectedScriptBase):
        (WebCore::InjectedScriptBase::initialize):
        (WebCore::InjectedScriptBase::injectedScriptObject):
        (WebCore::InjectedScriptBase::callFunctionWithEvalEnabled):
        (WebCore::InjectedScriptBase::makeCall):
        (WebCore::InjectedScriptBase::makeEvalCall):
        * inspector/InjectedScriptBase.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::wrapCanvas2DContext):
        (WebCore::InjectedScriptCanvasModule::wrapWebGLContext):
        (WebCore::InjectedScriptCanvasModule::callWrapContextFunction):
        (WebCore::InjectedScriptCanvasModule::markFrameEnd):
        (WebCore::InjectedScriptCanvasModule::callStartCapturingFunction):
        (WebCore::InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument):
        (WebCore::InjectedScriptCanvasModule::traceLog):
        (WebCore::InjectedScriptCanvasModule::replayTraceLog):
        (WebCore::InjectedScriptCanvasModule::resourceInfo):
        (WebCore::InjectedScriptCanvasModule::resourceState):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::InspectableObject::get):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::injectedScriptCanvasModule):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasInstrumentation.h:
        (WebCore::InspectorInstrumentation::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorInstrumentation::wrapWebGLRenderingContextForInstrumentation):
        * inspector/InspectorClient.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectableHeapObject::get):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::scriptToInspectorObject):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorForwarding.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::evaluateAsBoolean):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        (WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::createProfileHeader):
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorProfilerAgent::getHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::buildErrorRangeObject):
        (WebCore::InspectorRuntimeAgent::parse):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorStyleSheet::canBind):
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/InspectorWebAgentBase.h: Renamed from Source/WebCore/inspector/InspectorAgentRegistry.h.
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::InspectableNode::get):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::create):
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        * inspector/ScriptArguments.h:
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * inspector/ScriptDebugListener.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * page/Console.cpp:
        * page/ContentSecurityPolicy.cpp:
        * page/Frame.cpp:
        * page/PageConsole.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::createConnectEvent):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerThread.cpp:
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-12-11  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Store SHA1 hash in std::array
        https://bugs.webkit.org/show_bug.cgi?id=125446

        Reviewed by Darin Adler.

        Change Vector to std::array and use typedef.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-11  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto keys should support structured clone
        https://bugs.webkit.org/show_bug.cgi?id=125590

        Reviewed by Oliver Hunt.

        Tests: crypto/subtle/aes-postMessage.html
               crypto/subtle/hmac-postMessage.html
               crypto/subtle/postMessage-worker.html
               crypto/subtle/rsa-postMessage.html

        * crypto/CryptoAlgorithmIdentifier.h:
        (WebCore::CryptoAlgorithmIdentifier):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        AES_KW was added to WebCrypto spec editor's draft yesterday night. Now that we're
        adding a matching enum for structired clone serialization, it's as good a time as
        any to update the order of values to match.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::countUsages):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readHMACKey):
        (WebCore::CloneDeserializer::readAESKey):
        (WebCore::CloneDeserializer::readRSAKey):
        (WebCore::CloneDeserializer::readCryptoKey):
        (WebCore::CloneDeserializer::readTerminal):
        Added serialization/deserialization for CryptoKey. This doesn't update version
        number, because we don't currently store structured clones in persistent storage -
        and even if we did, we wouldn't want to invalidate everything users already stored.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoKey.idl:
        With structured clone, it is now possible to send a Key to a web worker. That's
        of no practical use because the crypto API is not exposed in workers, but we
        shouldn't crash anyway.

        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::isValidAESAlgorithm):
        * crypto/keys/CryptoKeyAES.h:
        Exposed isValidAESAlgorithm, so that a caller could know whether the constructor
        will assert.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        Added crypto/keys to search paths to avoid build breakage.

2013-12-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight margin-shape for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=125175

        Reviewed by Darin Adler.

        In addition to highlighting the shape, also highlight the shape created
        by shape-margin with a slightly more transparent color. This patch modifies
        the shape info passed to the Inspector Overlay to include a path for both
        the raw shape and the shape with margin.

        Test: inspector-protocol/model/highlight-shape-outside-margin.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForShapeOutside): Call Shape::buildDisplayPaths rather than
        Shape::buildPath, and pass along any relevant paths to the Inspector overlay.
        * inspector/InspectorOverlayPage.js:
        (_drawShapeHighlight): Draw the margin shape in addition to the raw shape.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::addRoundedRect): Add a rounded rect to the path.
        (WebCore::BoxShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::addPolygon): Add a set of vertices as a polygon to the path.
        (WebCore::PolygonShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects WAI-ARIA landmark roles
        https://bugs.webkit.org/show_bug.cgi?id=125584

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with landmark roles with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):

2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add a UPower-based BatteryProvider
        https://bugs.webkit.org/show_bug.cgi?id=115719

        Reviewed by Martin Robinson.

        Introduce the BatteryProviderUPower, a provider of the system's battery status that produces the information
        using the upower-glib library.

        The BatteryProviderUPower creates a new UPower client when the provider should start emitting updates and hooks
        up to device alteration signals. These only fire recalculation of the battery status when a battery device is altered.

        When recalculating, every battery device is taken into account, accumulating the energy capacities when both empty
        and full, the current rate of energy charging/discharging, and the battery status (whether the device is charging or
        discharging). This gives a set of data that covers the overall battery status of the system.

        This data is then used to calculate the battery status as perceived by the WebCore implementation. Charging is determined
        by examining the integral sign of the current combined energy rate. Charging and discharging times are calculated, when
        appropriate, by dividing the chargable/dischargable capacity with the current combined energy rate. The battery level is
        calculated by dividing the current energy capacity with the full energy capacity (i.e. the combined capacity of all
        the batteries that the system possesses). The status is (indirectly) passed onto BatteryManager by invoking the
        updateBatteryStatus method on the client, with the first parameter representing the battery charging/discharging state,
        the second parameter representing the time left until the battery is fully charged (when charging) or fully
        depleted (when discharging), and the third parameter representing the current battery level.

        Whenever the implementation cannot provide any information about the battery status of the system, the client's
        updateBatteryStatus method is invoked with the first parameter reporting the unavailability of any information
        about the battery status. The other two parameters can be omitted as they default to 0 when not given and are neither
        available nor useful in such circumstances. The client should handle such an update by reporting the 'default' battery
        status - charging, the battery level being at 1.0 and both the charging and discharging time having the value of
        the positive infinity (as per the Battery Status API specification).

        The implementation is heavily inspired by a similar approach to calculating battery status in GNOME Settings Daemon.

        No new tests - no new functionality. The feature is not yet enabled. When enabled, the relevant tests pass.

        * GNUmakefile.list.am: Add the BatteryProviderUPower(Client) build targets.
        * platform/glib/BatteryProviderUPower.cpp: Added.
        (powerDeviceAlterationCallback):
        (BatteryProviderUPower::BatteryProviderUPower):
        (BatteryProviderUPower::startUpdating):
        (BatteryProviderUPower::stopUpdating):
        (BatteryProviderUPower::updateBatteryStatus):
        * platform/glib/BatteryProviderUPower.h: Added.
        (WebCore):
        (BatteryProviderUPower):
        * platform/glib/BatteryProviderUPowerClient.h: Added.
        (WebCore):
        (BatteryProviderUPowerClient):

2013-12-11  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Improving createOffer and createAnswer LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=125568

        Reviewed by Philippe Normand.

        The constraints parameter should be optional in both. Also adding tests to check if we already have a local SDP
        when creating an answer.

        Existing tests were updated.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):

2013-12-11  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Fix build with CONTEXT_MENUS flag set OFF
        https://bugs.webkit.org/show_bug.cgi?id=125572

        Reviewed by Gyuyoung Kim.

        dispatchEventAsContextMenuEvent is called regardless of CONTEXT_MENUS flag setting,
        thus its definition in InspectorFrontendHost should not be guarded by this flag.

        No new tests, no behaviour change.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):

2013-12-11  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        [CURL] Build fails after r160386.
        https://bugs.webkit.org/show_bug.cgi?id=125571

        Reviewed by Zoltan Herczeg.

        Need no new tests.

        Fix a typo in commit r160386 that prevents building with curl.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-11  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Take into account fill-rule for polygon interpolation
        https://bugs.webkit.org/show_bug.cgi?id=125508

        Reviewed by Dirk Schulze.

        Implement the polygon fill-rule part of http://dev.w3.org/csswg/css-shapes/#basic-shape-interpolation.

        Adapt fast/shapes/shape-outside-floats/shape-outside-animation.html.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h: Added new enumeration to know
        when we are detaching a wrapper because of the cache or the
        element is being destroyed, so we can use that information.
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

2013-12-11  Andreas Kling  <akling@apple.com>

        REGRESSION(r160389): SVG test assertion extravaganza.

        Unreviewed. Use getAttribute() instead of fastGetAttribute() for
        the "type" attribute since it's animatable on SVG elements.

2013-12-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_nextBreakablePosition as private in InlineIterator, and use it.
        https://bugs.webkit.org/show_bug.cgi?id=125482

        Reviewed by Andreas Kling.

        InlineIterator has been exported m_nextBreakablePosition as public though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::nextBreakablePosition):
        (WebCore::InlineIterator::setNextBreakablePosition):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2013-12-10  Gurpreet Kaur  <k.gurpreet@samsung.com>

        top and bottom black background line not getting displayed
        https://bugs.webkit.org/show_bug.cgi?id=21664

        Reviewed by Simon Fraser.

        The table cell's background was not being displayed. Since the table
        cell had no child correct offsetWidth was not being set even if table
        width is being defined.

        Test: fast/dom/HTMLTableElement/empy-table-cell-with-background-color.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        cellHasContent should also be set to true incase background color is
        present.

2013-12-10  Beth Dakin  <bdakin@apple.com>

        Horizontal rubber-banding without a horizontal scrollbar is distracting
        https://bugs.webkit.org/show_bug.cgi?id=125550

        Reviewed by Simon Fraser.

        Setting the ScrollElasticity to ScrollElasticityAutomatic will make sure we only 
        rubber-band horizontally when there is a horizontal scrollbar.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Correct a preprocessor guard from a mis-merged patch

        In r160367, I mismerged a patch from Gustavo Noronha. This commit
        fixes the merge and thus fixes the CMake build.

        * html/HTMLMediaElement.idl: Move the preprocessor guard to the correct property.

2013-12-10  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Sam Weinig.

        Rewrite to not store type in m_type and also remove type getter/setter.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseAttribute):
        (WebCore::SVGScriptElement::typeAttributeValue):
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:

2013-12-10  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Use std::array when computing MD5 checksum
        https://bugs.webkit.org/show_bug.cgi?id=125509

        Reviewed by Anders Carlsson.

        Use MD5::Digest type and MD5::hashSize when computing MD5 checksum.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose splitter elements with ATK_ROLE_SEPARATOR
        https://bugs.webkit.org/show_bug.cgi?id=125522

        Reviewed by Chris Fleizach.

        Expose objects with SplitterRole role as ATK_ROLE_SEPARATOR.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Elements with role 'alertdialog' should be ATK_ROLE_ALERT
        https://bugs.webkit.org/show_bug.cgi?id=125521

        Reviewed by Chris Fleizach.

        Stop exposing alert dialogs as ATK_ROLE_DIALOG and do it as
        ATK_ROLE_ALERT instead.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Brendan Long  <b.long@cablelabs.com>

        [GTK][GStreamer] media/video-preload.html is flakily crashing on WK2
        https://bugs.webkit.org/show_bug.cgi?id=125411

        Reviewed by Philippe Normand.

        No new tests because this fixes flakeyness in existing tests (media/video-preload.html, and various tests in media/track/{audio,in-band,video}).

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadGetProperty): Copy tag list to prevent concurrent modification problems.
        (webkitTextCombinerPadEvent): Add locking.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Call tagsChanged() because we need it to setup m_tags.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Clear m_tags.
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged): Lookup the tags while we're in this callback, because it's the only time we can guarantee that the input-selector won't unref them.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Use m_tags.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_tags and a mutex.

2013-12-10  László Langó  <lango@inf.u-szeged.hu>

        PageConsole::addMessage should automatically determine column number alongside line number
        https://bugs.webkit.org/show_bug.cgi?id=114319

        Reviewed by Joseph Pecoraro.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        * dom/ScriptableDocumentParser.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        * html/parser/HTMLDocumentParser.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error):

2013-12-10  Andreas Kling  <akling@apple.com>

        Jettison all StyleResolver data on memory pressure.
        <https://webkit.org/b/125498>

        The StyleResolver can be rebuilt relatively quickly; we already
        have an optimization that discards it some time after last use.

        If we find ourseles under serious memory pressure, don't wait for
        the timer to kick in, throw everything overboard right away.

        ~5MB progression post-pressure on Membuster3.

        Reviewed by Anders Carlsson.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=116375

        Reviewed by Gustavo Noronha Silva.

        The CMake build is more complete than the autotools counterpart, so autotools doesn't consider
        some supplemental IDL attributes when building the DOM bindings. To prevent API breaks we should
        protect these attributes from DOM binding generation.

        * Modules/battery/BatteryManager.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * Modules/battery/NavigatorBattery.idl: Ditto.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Ditto.
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl: Ditto.
        * Modules/networkinfo/NetworkInfoConnection.idl: Ditto.
        * PlatformGTK.cmake: Add build steps for building the bindings.
        * dom/Document.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * html/HTMLMediaElement.idl: Ditto.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Various fixes for the CMake GTK+ build

        Reviewed by Gustavo Noronha.

        * PlatformGTK.cmake: Update source list.

2013-12-10  Robert Sipka  <sipka@inf.u-szeged.hu>

        [nix][curl] Buildfix after r160310
        https://bugs.webkit.org/show_bug.cgi?id=125489

        Reviewed by Gustavo Noronha Silva.

        Curl doesn't include soup files.

        * PlatformNix.cmake:

2013-12-10  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] REGRESSION: www.yahoo.com redirects to the mobile version after UA change
        https://bugs.webkit.org/show_bug.cgi?id=125444

        Reviewed by Martin Robinson.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString): more correctly pretend we're Mac OS X.
        (WebCore::standardUserAgent): ditto.

2013-12-09  Gustavo Noronha Silva  <gns@gnome.org>

        [Soup] Send original encoded data size to didReceiveBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125410

        Reviewed by Martin Robinson.

        No tests, the only way to test this seems to be through the inspector UI.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): data member to track stream
        position.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::currentStreamPosition): obtains the current stream position by querying
        the first seekable input stream we find.
        (WebCore::nextMultipartResponsePartCallback): store the position before we start reading a new part.
        (WebCore::sendRequestCallback): store the position before we start reading the response body.
        (WebCore::readCallback): pass the position delta to didReceiveData.

2013-12-09  Andreas Kling  <akling@apple.com>

        Clear out font width measurement caches on memory pressure.
        <https://webkit.org/b/125481>

        The data kept in WidthCaches can be regenerated on demand. Throwing
        it away when we're under memory pressure buys us ~4MB on Membuster3.

        Reviewed by Antti Koivisto.

2013-12-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove enabled() in InspectorRuntimeAgent.
        https://bugs.webkit.org/show_bug.cgi?id=125476

        Reviewed by Joseph Pecoraro.

        Dead code. It's never called anywhere.

        No new tests, no behavior change.

        * inspector/InspectorRuntimeAgent.h:

2013-12-09  Sam Weinig  <sam@webkit.org>

        Replace use of WTF::FixedArray with std::array
        https://bugs.webkit.org/show_bug.cgi?id=125475

        Reviewed by Anders Carlsson.

        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * platform/graphics/GlyphMetricsMap.h:

2013-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Refactor the CFURLConnectionClient to be the synchronous implementation of an abstract network delegate
        https://bugs.webkit.org/show_bug.cgi?id=125379

        Reviewed by Alexey Proskuryakov.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegate::ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::~ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willSendRequestCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFinishLoadingCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFailCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willCacheResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveChallengeCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didSendBodyDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpaceCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataArrayCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::makeConnectionClient):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h: Added.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::SynchronousResourceHandleCFURLConnectionDelegate):
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFail):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveChallenge):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didSendBodyData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: Added.

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r136280): input[type=image] should assume coords of 0,0 when activated without physically clicking
        https://bugs.webkit.org/show_bug.cgi?id=125392

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/3c33d42207cd209bb171083ba66c225f694f2101

        Activating an image button with the keyboard or element.click() should result in selected coords of (0,0) per
        http://www.w3.org/TR/2013/CR-html5-20130806/forms.html#image-button-state-(type=image)
        "If the user activates the control without explicitly selecting a coordinate, then the coordinate (0,0) must be assumed."

        New behavior also matches that of Internet Explorer and Firefox.

        Tests: fast/forms/input-image-submit.html

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent): Set m_clickLocation to (0, 0) for simulated events.

2013-12-09  Jer Noble  <jer.noble@apple.com>

        [MSE] Add support for VideoPlaybackMetrics.
        https://bugs.webkit.org/show_bug.cgi?id=125380

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-video-playback-quality.html

        Add a new object type VideoPlaybackQuality to be returned by
        HTMLMediaElement.getVideoPlaybackQuality().

        HTMLMediaElements must separately track a droppedVideoFrame count, as
        certain operations on SourceBuffer will drop incoming frames, which must
        be accounted for. Reset this count when the media engine changes, which is
        indicitive of a new media load requset starting.

        Add the new VideoPlaybackQuality class:
        * Modules/mediasource/VideoPlaybackQuality.cpp: Added.
        (WebCore::VideoPlaybackQuality::create):
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality):
        * Modules/mediasource/VideoPlaybackQuality.h: Added.
        (WebCore::VideoPlaybackQuality::creationTime):
        (WebCore::VideoPlaybackQuality::totalVideoFrames):
        (WebCore::VideoPlaybackQuality::droppedVideoFrames):
        (WebCore::VideoPlaybackQuality::corruptedVideoFrames):
        (WebCore::VideoPlaybackQuality::totalFrameDelay):
        * Modules/mediasource/VideoPlaybackQuality.idl: Added.

        Add support for the new class to HTMLMediaElement:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::shouldUseVideoPluginProxy):
        (HTMLMediaElement::getVideoPlaybackQuality):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Report the video quality metrics from the MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::totalVideoFrames):
        (WebCore::MediaPlayer::droppedVideoFrames):
        (WebCore::MediaPlayer::corruptedVideoFrames):
        (WebCore::MediaPlayer::totalFrameDelay):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::totalVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay):

        Correctly report the dropped frame count:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer): needsRandomAccessFlag defaults to true.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Check the sync status of the incoming sample.
        (WebCore::SourceBuffer::didDropSample): Notify the media element of a dropped frame.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (HTMLMediaElement::mediaPlayerEngineUpdated): Reset m_droppedFrameCount.
        (HTMLMediaElement::getVideoPlaybackQuality): Return a new VideoPlaybackQuality object.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::incrementDroppedFrameCount): Simple incrementer.
        * platform/MediaSample.h:
        (WebCore::MediaSample::isSync): Convenience function.
        (WebCore::MediaSample::isNonDisplaying): Ditto.

        Add support in the AVFoundation MediaSource Engine:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay):

        Add support in the Mock MediaSource Engine:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Simple accessor.
        (WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::enqueueSample): Increment the frame counts based on
            the incoming sample.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Add the new files to the project:
        * bindings/gobject/GNUmakefile.am:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUMakefile.list.am:
        * CMakeLists.txt:

2013-12-09  Simon Fraser  <simon.fraser@apple.com>

        Avoid divide by zero in scrollbar code, and protect against Obj-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=125469
        <rdar://problem/15535772>

        Reviewed by Beth Dakin.
        
        In ScrollbarThemeMac::setPaintCharacteristicsForScrollbar(), proportion could
        end up as NaN if scrollbar->totalSize() were zero. Protect against that.
        
        Also wrap functions that call into Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/
        END_BLOCK_OBJC_EXCEPTIONS.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):
        (WebCore::scrollbarPainterPaint):

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Implement Document.cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=11646

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/dc7879025e01d63be9fcf6a84ca6c9b8b5768a80

        Implement the behavior specified in the current DOM4 working draft:
        http://www.w3.org/TR/2013/WD-dom-20131107/#dom-node-clonenode

        Tests: fast/dom/Document/clone-node.html
               fast/dom/HTMLDocument/clone-node-quirks-mode.html
               svg/custom/clone-node.html

        * dom/Document.cpp:
        (WebCore::Document::cloneNode):
        (WebCore::Document::cloneDocumentWithoutChildren):
        (WebCore::Document::cloneDataFromDocument):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren):
        * html/HTMLDocument.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::cloneDocumentWithoutChildren):
        * svg/SVGDocument.h:

2013-12-09  Andreas Kling  <akling@apple.com>

        REGRESSION(r160260): Memory pressure signal causes web process to hang.
        <https://webkit.org/b/125465>

        Reviewed by Tim Horton.

        This command caused all of my web processes to hang:

            notifyutil -p org.WebKit.lowMemory

        This only happens when the cache pruning code encounters a resource
        using purgeable memory.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):

            Grab the next CachedResource pointer before continuing the loop.

2013-12-09  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] OpenGL compile error.
        https://bugs.webkit.org/show_bug.cgi?id=125383

        Reviewed by Darin Adler.

        * platform/graphics/opengl/Extensions3DOpenGLES.h: Define GL_HALF_FLOAT_ARB on Windows when OPENGL_ES_2 is used.

2013-12-09  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix handling of 'inherit' and 'initial' for grid lines.
        https://bugs.webkit.org/show_bug.cgi?id=125223

        Reviewed by Darin Adler.

        'initial' and 'inherit' are always allowed values for CSS properties.
        As the CSSParser handles them automatically, those 2 values were never
        taken care of in StyleResolver, leading to crashes.

        Added tests cases for 'inherit' and 'initial' to the following tests:

        fast/css-grid-layout/grid-item-column-row-get-set.html
        fast/css-grid-layout/grid-item-end-after-get-set.html
        fast/css-grid-layout/grid-item-start-before-get-set.html

        Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::StyleGridItemData):

2013-12-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector.json and CodeGenerator tweaks
        https://bugs.webkit.org/show_bug.cgi?id=125321

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Runtime.json:
        Runtime.js was depending on Network.FrameId. This is a layering
        violation, so ideally we can fix this later. For now, just copy
        the FrameId type into Runtime. They are strings so all is good.

        * inspector/CodeGeneratorInspector.py:
        (Generator.EventMethodStructTemplate.append_epilog):
        * inspector/CodeGeneratorInspectorStrings.py:
        Improve --help usage information.
        Make the script work with a single domain json file.
        Add ASCIILiteral's where appropriate.

2013-12-09  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Nix] Fix file name typo in PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=125457

        Reviewed by Gustavo Noronha Silva.

        Wrong file name introduced in http://trac.webkit.org/changeset/160310.
        * PlatformNix.cmake:

2013-12-09  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Memory leak due to incorrect use of gst_tag_list_merge in TextCombinerGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=125452

        Reviewed by Philippe Normand.

        No new tests because this fixes a memory leak.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadEvent): Use gst_tag_list_insert instead of gst_tag_list_merge, since we don't want to create a new list.

2013-12-09  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit ignores @alt on IMG elements with role="text"
        https://bugs.webkit.org/show_bug.cgi?id=125363

        Reviewed by Mario Sanchez Prada.

        If an <img> element has a different role, the alt attribute should still be used in the 
        name calculation if present.

        Test: accessibility/alt-tag-on-image-with-nonimage-role.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::usesAltTagForTextComputation):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        (WebCore::AccessibilityNodeObject::text):
        * accessibility/AccessibilityNodeObject.h:

2013-12-08  Martin Robinson  <mrobinson@igalia.com>

        [WK2][Soup] Use didReceiveBuffer instead of didReceiveData
        https://bugs.webkit.org/show_bug.cgi?id=118598

        Reviewed by Gustavo Noronha Silva.

        Original patch by Kwang Yul Seo  <skyul@company100.net> and Csaba OsztrogonÃ¡c  <ossy@webkit.org>.

        Switch from using didReceiveData to didReceiveBuffer for the Soup backend and
        let SharedBuffer wrap a SoupBuffer. This is necessary because the NetworkProcess
        only supports getting data via SharedBuffer.

        * GNUmakefile.list.am: Add the new SharedBufferSoup.cpp file to the list.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformNix.cmake:
        * platform/SharedBuffer.cpp: We no longer used the no-op version of the platformFoo methods.
        * platform/SharedBuffer.h: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:  Use didReceiveBuffer instead of didReceiveData.
        * platform/network/ResourceHandleInternal.h: Have only a m_soupBuffer member instead of three to manage the buffer.
        * platform/network/soup/GOwnPtrSoup.cpp: Add support for SoupBuffer.
        * platform/network/soup/GOwnPtrSoup.h: Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData): ASSERT_NOT_REACHED here, since it should never be
        called now.
        (WebCore::WebCoreSynchronousLoader::didReceiveBuffer): Handle this call properly.
        (WebCore::ResourceHandle::ensureReadBuffer): Now we package up our buffer into a SoupBuffer.
        (WebCore::redirectSkipCallback): Use the new m_soupBuffer member.
        (WebCore::cleanupSoupRequestOperation): Ditto.
        (WebCore::nextMultipartResponsePartCallback): Ditto.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback):
        * platform/soup/SharedBufferSoup.cpp: Added.

2013-12-09  Michal Poteralski  <m.poteralski@samsung.com>

        DataCloneError exception is not thrown when postMessage's second parameter is the source
        port or the target port.

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

        Reviewed by Alexey Proskuryakov.

        According to specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#dom-window-postmessage

        If the method was invoked with a second argument transfer then if any of the objects in the
        transfer are either the source port or the target port (if any), then a DataCloneError
        exception should be thrown. Currently an InvalidStateError exception is thrown what is an
        incorrect behaviour.

        The proposed solution is change to the correct the exception value.

        Tests: fast/dom/Window/postMessage-clone-port-error.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage): Improve exception value

2013-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build with NetworkProcess enabled.

        * GNUmakefile.list.am: Add missing file to compilation.

2013-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle border-radius shorthand omits vertical radius information
        https://bugs.webkit.org/show_bug.cgi?id=125394

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4c2866855dddbb28bb7d978ad627acc368af23d0

        getComputedStyle of border-radius shows the vertical radius components if they differ from their horizontal counterpants.
        We were incorrectly detecting this case and over simplifying the results of getComputedStyle.
        This patch ensures we only hide the vertical values if they are identical to the horizontal values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not skip attributes with only custom setter
        https://bugs.webkit.org/show_bug.cgi?id=125417

        Reviewed by Gustavo Noronha Silva.

        For attributes with a custom setter, we now generate the code as a
        read-only attribute with a getter method, unless it also has a
        custom getter in which case the attribute is skipped.

        * bindings/gobject/GNUmakefile.am: Generate WebKitDOMMediaController
        that is now required by an attribute having a custom setter.
        * bindings/gobject/WebKitDOMCustom.cpp: Remove methods that are now generated.
        * bindings/gobject/WebKitDOMCustom.h: Ditto.
        * bindings/gobject/WebKitDOMCustom.symbols: Ditto.
        * bindings/gobject/webkitdom.symbols: Add new symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Do not skip attributes having a custom setter.
        (GetWriteableProperties): Do not include attributes having a
        custom setter.
        (GenerateProperty): Do not return early for attributes having
        custom setter.
        (GenerateFunctions): Do not generate setter for attributes having
        a custom setter.

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not generate new dispatch_event methods marked as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=125416

        Reviewed by Gustavo Noronha Silva.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip dispatch_event methods for objects
        implementing EventTarget interface unless they are already
        deprecated.
        (GenerateFunction): Pass also the parentNode to SkipFunction().

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

        [MSE] Bring end-of-stream algorithm section up to current spec.
        https://bugs.webkit.org/show_bug.cgi?id=125270

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-end-of-stream.html

        Separate the "endOfStream()" method from the "end of stream algorithm".

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::SourceBufferIsUpdating): Added predicate function.
        (WebCore::MediaSource::endOfStream): Call streamEndedWithError().
        (WebCore::MediaSource::streamEndedWithError): Added.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Call streamEndedWithError().
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::mediaLoadingFailedFatally): Renamed from mediaEngineError.
        (HTMLMediaElement::mediaLoadingFailed): Call renamed method.
        * html/HTMLMediaElement.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream): Set load state to Loaded.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::setNetworkState): Simple setter.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Set the intitial duration to NaN.
        (WebCore::MockMediaSourcePrivate::markEndOfStream): Set load state to Loaded.

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash when removing MediaSource from HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=125269

        Reviewed by Sam Weinig.

        Fixes the media/media-source/media-source-fastseek.html test when run with MallocScribble enabled.

        It's possible for a SourceBufferPrivateAVFObjC to outlive its MediaSourcePrivateAVFObjC, so
        make sure to clear the pointer from the former to the latter when the latter is destroyed.
        That means we now have to check to see if the pointer to the latter is still valid at every
        call site.

        As a drive-by fix, rename m_parent to m_mediaSource to more accurately reflect what the pointer
        points to.

        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC): Clear the SourceBuffer's backpointer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        (WebCore::SourceBufferPrivateAVFObjC::clearMediaSource): 
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Rename m_parent -> m_mediaSource.
        (WebCore::SourceBufferPrivateAVFObjC::append): Check m_mediaSource before calling.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::readyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setActive): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate): Clear the SourceBuffer's backpointer.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate): Rename m_parent -> m_mediaSource.
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource): Check m_mediaSource before calling.
        (WebCore::MockSourceBufferPrivate::readyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setReadyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setActive): Ditto.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        (WebCore::MockSourceBufferPrivate::clearMediaSource):

2013-12-07  Zoltan Horvath  <zoltan@webkit.org>

        Remove statusWithDirection static function from RenderBlockLineLayout
        https://bugs.webkit.org/show_bug.cgi?id=125372

        Reviewed by Andreas Kling.

        I run into a FIXME about using BidiStatus constructor rather than statusWithDirection,
        once it's implemented. BidiStatus has got the appropriate constructor now, so I removed
        statusWithDirection and updated the code to use the constructor of BidiStatus.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):

2013-12-07  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Build fix for gtk port after r160260.

        * loader/cache/CachedImage.h: Add missing a header.

2013-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        ubuntu software center hits _XReadEvents() error
        https://bugs.webkit.org/show_bug.cgi?id=123480

        Reviewed by Martin Robinson.

        * platform/gtk/WidgetBackingStoreGtkX11.cpp:
        (WebCore::WidgetBackingStoreGtkX11::~WidgetBackingStoreGtkX11): clear the surface
        before freeing the associated pixmap.

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Unreviewed patch to fix review comments...

        * platform/graphics/BitmapImage.h:
        Dan noticed that these return statements were improperly indented.

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

        [MSE][Mac] Disable AVFoundation when enabling the MockMediaPlayerMediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=125338

        Reviewed by Darin Adler.

        The MediaSource API has some assumptions which break if more than one installed
        media engine supports MediaSources at the same time. So when enabling the mock
        media source engine in DRT or WKTR, disable AVFoundation so that only the mock
        engine will support media source loading.

        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Use NeverDestroyed instead of DEFINE_STATIC_LOCAL

        Reviewed by Anders Carlsson.

        * rendering/RenderText.cpp:
        (WebCore::originalTextMap):

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

        [MSE] Add a runtime-setting for the MediaSource constructor.
        https://bugs.webkit.org/show_bug.cgi?id=125336

        Reviewed by Eric Carlson.

        Add a Setting to enable the MediaSource constructor.

        * Modules/mediasource/MediaSource.idl:
        * page/Settings.in:

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Reviewed by Simon Fraser.

        No new tests, just an optimization.

        Instead of throwing away decoded image data eagerly, allow the operating
        system to manage the memory via the standard purgeability mechanism,
        where it can.

        This improves the performance on some pathological cases (extremely large
        animated GIFs) by up to 8x.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        Don't prune live resources' decoded data if it is purgeable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Don't eagerly throw away decoded image data if it's purgeable.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decodedDataIsPurgeable):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Save original text for RenderText to a map
        https://bugs.webkit.org/show_bug.cgi?id=125278

        Reviewed by Darin Adler.
        
        Currently the original text is fetched from the Text node. This is one of the few things 
        where we use the RenderText node pointer and is stopping Text nodes from being anonymous.
        
        It is very rare of original text to differ from the actual text so we can just squirrel the
        original to a map when it differs. This is also simplifies the code.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderText.cpp:
        (WebCore::originalTextMap):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::~RenderText):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::originalText):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):
        * rendering/RenderText.h:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTextFragment.h:

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Refactor MediaSourceBase back into MediaSource
        https://bugs.webkit.org/show_bug.cgi?id=125245

        Reviewed by Eric Carlson.

        Now that the legacy WebKitMediaSource has been removed, there is no reason to have
        a separate MediaSource and MediaSourceBase. Re-integrate the two.

        Copy all the methods from MediaSource into MediaSourceBase, and rename the class MediaSource:
        * Modules/mediasource/MediaSource.cpp: Copied from MediaSourceBase.cpp.
        (WebCore::MediaSource::create): Copied from MediaSource.cpp.
        (WebCore::MediaSource::addSourceBuffer): Ditto.
        (WebCore::MediaSource::removeSourceBuffer): Ditto.
        (WebCore::MediaSource::isTypeSupported): Ditto.
        (WebCore::MediaSource::eventTargetInterface): Ditto.
        (WebCore::MediaSource::sourceBufferDidChangeAcitveState): Ditto.
        * Modules/mediasource/MediaSource.h: Copied from MediaSourceBase.h.
        (WebCore::MediaSource::sourceBuffers): Copied from MediaSource.h.
        (WebCore::MediaSource::activeSourceBuffers): Copied from MediaSource.h.
        * Modules/mediasource/MediaSourceBase.cpp: Removed.
        * Modules/mediasource/MediaSourceBase.h: Removed.

        Change all references to MediaSourceBase into MediaSource:
        * Modules/mediasource/DOMURLMediaSource.cpp:
        (WebCore::DOMURLMediaSource::createObjectURL):
        * Modules/mediasource/DOMURLMediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registerURL):
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:

        Remove MediaSourceBase.cpp/h from the project file:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-12-06  Eric Carlson  <eric.carlson@apple.com>

        r159827 broke plug-in snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=125365

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Return early if there is NOT
            a page, not if there IS a page.

2013-12-06  Roger Fong <roger_fong@apple.com> and Brent Fulgham  <bfulgham@apple.com>

        [Win] Support compiling with VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125353

        Reviewed by Anders Carlsson.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use nullptr
        (WebCore::LegacyWebArchive::createFromSelection): Ditto

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=123378

        Reviewed by Eric Carlson.

        Add an AVFoundation implementation of MediaPlayerPrivate which creates and uses
        MediaSourcePrivate and SourceBufferPrivate subclasses.

        Add the new media engine to the list of installed engines:
        * platform/MediaSample.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        * platform/graphics/MediaPlayer.h:

        Add the new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive by fix for ports who implement seekDouble():
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance):

        Add new Video and AudioTrackPrivate types which handle their own enable state:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp: Added
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h: Added
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp: Added.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setSelected):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h: Added.

        Add a new MediaPlayerPrivate which can handle MediaSource objects:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: Added.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::create):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareToPlay):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformMedia):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsScanning):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initialTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::networkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::readyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxTimeSeekableDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::didLoadingProgress):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::movieLoadType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareForRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::engineDescription):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::languageOfPrimaryAudioTrack):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::extraMemoryCost):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateDuration):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateStates):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNetworkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer):

        Add a new MediaSourcePrivate implementation:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: Added.
        (WebCore::MediaSourcePrivateAVFObjC::player):
        (WebCore::MediaSourcePrivateAVFObjC::activeSourceBuffers):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: Added.
        (WebCore::MediaSourcePrivateAVFObjC::create):
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::duration):
        (WebCore::MediaSourcePrivateAVFObjC::setDuration):
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::unmarkEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::readyState):
        (WebCore::MediaSourcePrivateAVFObjC::setReadyState):
        (WebCore::MediaSourcePrivateAVFObjC::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MediaSourcePrivateAVFObjCHasAudio):
        (WebCore::MediaSourcePrivateAVFObjC::hasAudio):
        (WebCore::MediaSourcePrivateAVFObjCHasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::hasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime):

        Add a new SourceBufferPrivate implementation:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Added.
        (-[WebAVStreamDataParserListener initWithParser:parent:WebCore::]):
        (-[WebAVStreamDataParserListener dealloc]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
        (WebCore::MediaSampleAVFObjC::create):
        (WebCore::MediaSampleAVFObjC::~MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::platformSample):
        (WebCore::CMSampleBufferIsRandomAccess):
        (WebCore::MediaSampleAVFObjC::flags):
        (WebCore::MediaDescriptionAVFObjC::create):
        (WebCore::MediaDescriptionAVFObjC::~MediaDescriptionAVFObjC):
        (WebCore::MediaDescriptionAVFObjC::MediaDescriptionAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::create):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::callProcessCodedFrameForEachSample):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::didReachEndOfTrackWithTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::setClient):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
        (WebCore::SourceBufferPrivateAVFObjC::readyState):
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
        (WebCore::SourceBufferPrivateAVFObjC::evictCodedFrames):
        (WebCore::SourceBufferPrivateAVFObjC::isFull):
        (WebCore::SourceBufferPrivateAVFObjC::hasVideo):
        (WebCore::SourceBufferPrivateAVFObjC::hasAudio):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::createNonDisplayingCopy):
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::setActive):
        (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime):
        * platform/mac/PlatformClockCM.h:

        Add a SOFT_LINK_CLASS_OPTIONAL macro:
        * platform/mac/SoftLinking.h:

2013-12-06  Alexey Proskuryakov  <ap@apple.com>

        Remove some duplicate checks from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=125358

        Reviewed by Geoffrey Garen.

        There is no need to call inherits() before WebCore's toXXX(JSValue) functions.

        Also, the result of toArrayBuffer() is a raw pointer, not a RefPtr (it's confusing
        because toArrayBufferView returns a RefPtr).

        * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneSerializer::dumpIfTerminal):

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Simon Fraser.

        Missed a comment when removing this code.

        * svg/graphics/SVGImage.h:

2013-12-06  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] ShapeOutsideInfo needs to use the parent's writing mode when calculating offsets
        https://bugs.webkit.org/show_bug.cgi?id=124680

        Reviewed by Dirk Schulze.

        Do not take the writing-mode property on the float into account for shape-outside.
        Add a virtual method writingMode() in order to do this for shape-outside but
        keep old behavior (element writingMode) for shape-inside.

        Change existing test floats/shape-outside-floats-different-writing-modes.html to test the
        new behavior.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.h:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Staging Workaround
        https://bugs.webkit.org/show_bug.cgi?id=125354

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Simplify ScriptFunctionCall by removing dead code.
        https://bugs.webkit.org/show_bug.cgi?id=125274

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/js/ScriptFunctionCall.h:

2013-12-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/rendering changes
        https://bugs.webkit.org/show_bug.cgi?id=125239

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::previousOnLineExists): Added.
        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground): Modified to query RenderStyle
        on iOS for the composition fill color. Added FIXME to make this platform-independent.
        (WebCore::InlineTextBox::paintDecoration): Added iOS-specific decoration code.
        (WebCore::lineStyleForMarkerType):
        (WebCore::InlineTextBox::paintDocumentMarkers): Added iOS-specific code. Also, added
        FIXME to make this code platform-independent.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Ditto.
        (WebCore::positionForPointRespectingEditingBoundaries): Added iOS-specific code.
        * rendering/RenderBlock.h: Changed access control of logical{Left, Right}SelectionOffset()
        from private to protected so that these methods can be used from RenderImage::collectSelectionRects().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderRadii): Added.
        (WebCore::RenderBox::paintBoxDecorations): Added iOS-specific workaround. See <rdar://problem/6209763>
        for more details.
        (WebCore::RenderBox::computeRectForRepaint): Added iOS-specific code. 
        (WebCore::customContainingBlockWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockAvailableLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderBox::availableLogicalHeightUsing): Added iOS-specific code; calls customContainingBlockAvailableLogicalHeight().
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Added iOS-specific code; calls customContainingBlockLogicalWidth().
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned): Added iOS-specific code; calls customContainingBlockLogicalHeight().
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Added iOS-specific code.
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::layout): Added; iOS-specific. Includes FIXME comment.
        See <rdar://problem/7675493> for more details.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange): Added iOS-specific code.
        (WebCore::RenderElement::styleDidChange): Modified to only call areCursorsEqual() and
        EventHandler::scheduleCursorUpdate() on a non-iOS port.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing): Added iOS-specific code.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason): This method has an empty implementation for iOS.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReasonWithDescription): Ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeHeight):
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Added iOS-specific code.
        (WebCore::RenderFileUploadControl::paintObject): Ditto.
        (WebCore::RenderFileUploadControl::fileTextValue): Ditto.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames): Ditto; Also added FIXME comment as this code may not
        be specific to iOS.
        * rendering/RenderIFrame.h: Added iOS-specific workaround to RenderObject::renderName(). Added
        FIXME comment to determine whether this workaround is still applicable.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderImage::paintAreaElementFocusRing): This method has an empty implementation for iOS.
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteQuadsForSelection): Added; guarded by PLATFORM(IOS).
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Added iOS-specific member initialization.
        (WebCore::RenderLayer::~RenderLayer): Added iOS-specific code.
        (WebCore::RenderLayer::willBeDestroyed): Added; iOS-specific.
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling): Ditto.
        (WebCore::RenderLayer::handleTouchEvent): Ditto.
        (WebCore::RenderLayer::registerAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling): Added iOS-specific code as we use UIKit
        to composite our scroll bars.
        (WebCore::RenderLayer::scrollTo): Added iOS-specific code.
        (WebCore::RenderLayer::scrollRectToVisible): Ditto.
        (WebCore::RenderLayer::styleChanged): Modified to make use of the passed StyleDifference on iOS.
        (WebCore::RenderLayer::visibleContentRect): Added; iOS-specific.
        (WebCore::RenderLayer::didStartScroll): Ditto.
        (WebCore::RenderLayer::didEndScroll): Ditto.
        (WebCore::RenderLayer::didUpdateScroll): Ditto.
        (WebCore::RenderLayer::invalidateScrollbarRect): Added iOS-specific code.
        (WebCore::RenderLayer::invalidateScrollCornerRect): Ditto.
        (WebCore::RenderLayer::verticalScrollbarWidth): Ditto.
        (WebCore::RenderLayer::horizontalScrollbarHeight): Ditto.
        (WebCore::RenderLayer::updateScrollableAreaSet): Ditto.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Add iOS-specific workaround with FIXME. See
        <rdar://problem/15579797> for more details.
        (WebCore::RenderLayer::paintOverflowControls): Added iOS-specific code.
        (WebCore::RenderLayer::calculateClipRects): Ditto.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Modified to not apply page scale on iOS
        as we apply a page scale at a different time in the code.
        (WebCore::RenderLayerBacking::layerWillBeDestroyed): Added; guarded by PLATFORM(IOS).
        (WebCore::layerOrAncestorIsTransformedOrScrolling): Added iOS-specific variant with FIXME comment.
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Added iOS-specific code.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Ditto.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ditto.
        (WebCore::RenderLayerBacking::registerScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::updateScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::containsPaintedContent): Call RenderLayer::hasBoxDecorationsOrBackground()
        when building on iOS Simulator.
        (WebCore::RenderLayerBacking::parentForSublayers): Added iOS-specific code and FIXME comment.
        (WebCore::RenderLayerBacking::paintsIntoWindow): Opt-into coordinated graphics code path.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Added iOS-specific code.
        (WebCore::RenderLayerBacking::paintIntoLayer): Compile-out ASSERT_NOT_REACHED for iOS and added FIXME comment.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::chromeClient): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Added iOS-specific code.
        (WebCore::scrollbarHasDisplayNone): Added; iOS-specific.
        (WebCore::updateScrollingLayerWithClient): Ditto.
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush): Ditto.
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::didChangeVisibleRect): Ditto.
        (WebCore::RenderLayerCompositor::addToOverlapMap): Don't apply page scale factor on iOS. We apply
        the page scale factor at a different time in the code. Also, added FIXME comment.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Added iOS-specific workaround.
        See <rdar://problem/8348337> for more details.
        (WebCore::RenderLayerCompositor::setIsInWindow): Use non-Mac code path for iOS.
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Ditto.
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation): Opt-into calling
        AnimationController::isRunningAnimationOnRenderer() on iOS.
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling): Added; guarded by PLATFORM(IOS).
        (WebCore::isStickyInAcceleratedScrollingLayerOrViewport): Added iOS-specific code.
        (WebCore::isViewportConstrainedFixedOrStickyLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Ditto.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Ditto.
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints): Ditto.
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer): This method has an empty implementation for iOS
        as we batch update viewport-constrained layers in the iOS-specific method, RenderLayerCompositor::updateCustomLayersAfterFlush().
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer): Ditto.
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers): Ditto.
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerAddedOrUpdated): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerRemoved): Ditto.
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded): Ditto.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h: Added iOS-specific Clang workaround to ignore
        an unused private field.
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderMenuList::RenderMenuList): On iOS we don't make use of RenderMenuList::m_popupIsVisible.
        (WebCore::RenderMenuList::~RenderMenuList): On iOS we don't make use of RenderMenuList::m_popup.
        (WebCore::RenderMenuList::adjustInnerStyle): Add iOS-specific code.
        (RenderMenuList::updateFromElement): On iOS we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::setTextFromOption): Add iOS-specific code.
        (RenderMenuList::showPopup): Define RenderMenuList::showPopup() to ASSERT_NOT_REACHED() on iOS as
        we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::hidePopup): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popup.
        (RenderMenuList::popupDidHide): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popupIsVisible.
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::columnNumberForOffset): Added; guarded by PLATFORM(IOS). Also, added a FIXME comment to
        make this function return an unsigned integer instead of a signed integer.
        (WebCore::RenderObject::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderObject::destroy): Added iOS-specific code.
        (WebCore::RenderObject::innerLineHeight): Added.
        (WebCore::RenderObject::willRenderImage): Added iOS-specific code.
        * rendering/RenderObject.h: Change the access control of RenderObject::drawLineForBoxSide() from protected to
        public so that it can be used from RenderThemeIOS::adjustMenuListButtonStyle().
        (WebCore::RenderObject::absoluteQuadsForSelection):
        * rendering/RenderScrollbar.h: Change the access control of RenderScrollbar::getScrollbarPseudoStyle() from
        private to public so that it can be used from the iOS-specific static function, scrollbarHasDisplayNone,
        defined in RenderLayerCompositor.cpp.
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::itemText): Added iOS-specific code.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderText::setTextInternal): Added iOS-specific code.
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle): Ditto.
        (WebCore::RenderTextControl::canScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderTextControl::innerLineHeight): Ditto.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle): Added iOS-specific code.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Ditto.
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth): Ditto.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::lineDirectionPointFitsInBox): Ditto.
        (WebCore::RenderTextLineBoxes::positionForPoint): Added iOS-specific code.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly): Ditto.
        (WebCore::RenderTheme::paintDecorations): Modified to call the control-specific paint*Decorations().
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintCheckboxDecorations): Added.
        (WebCore::RenderTheme::paintRadioDecorations): Added.
        (WebCore::RenderTheme::paintButtonDecorations): Added.
        (WebCore::RenderTheme::paintTextFieldDecorations): Added.
        (WebCore::RenderTheme::paintTextAreaDecorations): Added.
        (WebCore::RenderTheme::paintMenuListDecorations): Added.
        (WebCore::RenderTheme::paintPushButtonDecorations): Added.
        (WebCore::RenderTheme::paintSquareButtonDecorations): Added.
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Added.
        (WebCore::RenderTheme::paintSliderThumbDecorations): Added.
        (WebCore::RenderTheme::paintSearchFieldDecorations): Added.
        * rendering/RenderThemeIOS.h: Added.
        * rendering/RenderThemeIOS.mm: Added.
        * rendering/RenderThemeMac.h: Don't compile the contents of this file when building for iOS.
        * rendering/RenderThemeMac.mm: Ditto.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize): Compile-out code when building for iOS.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight): Add iOS-specific workaround. See <rdar://problem/7166808>.
        (WebCore::fixedPositionOffset): Added; used in iOS-specific code (e.g. RenderView::mapLocalToContainer()).
        (WebCore::RenderView::mapLocalToContainer): Use WebCore::fixedPositionOffset() instead of 
        FrameView::scrollOffsetForFixedPosition().
        (WebCore::RenderView::pushMappingToContainer): Ditto.
        (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto.
        (WebCore::RenderView::repaintViewRectangle): Ditto.
        (WebCore::RenderView::computeRectForRepaint): Ditto.
        (WebCore::isFixedPositionInViewport): Added; used in RenderView::hasCustomFixedPosition().
        (WebCore::RenderView::hasCustomFixedPosition): Added; guarded by PLATFORM(IOS).
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed): Added iOS-specific code.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox): Ditto.
        * rendering/break_lines.cpp: Only include header <CoreServices/CoreServices.h> when building for Mac.

2013-12-06  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the includes of RenderBlock.h 
        https://bugs.webkit.org/show_bug.cgi?id=125351

        Reviewed by Darin Adler.

        I turned some header includes into forward declarations. I also removed / 
        moved out some includes, which don't belong to RenderBlock.h anymore.

        No new tests, no behavior change.

        * editing/VisibleUnits.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/TextFieldInputType.cpp:
        * html/TextInputType.cpp:
        * rendering/InlineElementBox.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/line/LineBreaker.h:
        * rendering/line/LineWidth.cpp:

2013-12-06  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Define SHA1 hash size in SHA1.h and use it at various places.
        https://bugs.webkit.org/show_bug.cgi?id=125345

        Reviewed by Darin Adler.

        Use SHA1::hashSize instead of local variables.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-06  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add load delegate methods for responding to authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=125333

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported core(NSURLCredential *).

2013-12-06  Daniel Bates  <dabates@apple.com>

        Rename {adjust, paint}SearchFieldDecoration, {adjust, paint}SearchFieldResultsDecoration
        https://bugs.webkit.org/show_bug.cgi?id=125191

        Reviewed by Joseph Pecoraro.

        Towards upstreaming the iOS concept of render theme decorations, we should rename
        RenderTheme::{adjust, paint}SearchFieldDecorationStyle and RenderTheme::{adjust, paint}SearchFieldResultsDecoration
        to avoid ambiguity with the iOS concept.

        * platform/efl/RenderThemeEfl.cpp:
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        * rendering/RenderThemeWinCE.h:

2013-12-06  Andreas Kling  <akling@apple.com>

        Make remaining CSSValue constructors return PassRef.
        <https://webkit.org/b/125337>

        Tweak the remaining CSSValue create() helpers to return PassRef
        instead of PassRefPtr in the cases where nullptr is never returned.

        Reviewed by Anders Carlsson.

2013-12-06  Roger Fong  <roger_fong@apple.com>

        Hook into some shader symbol logic following the ANGLE update in r159533.
        https://bugs.webkit.org/show_bug.cgi?id=125332.

        Reviewed by Brent Fulgham.

        No new functionality added.

        * html/canvas/WebGLRenderingContext.cpp: Add some error checking for errors related to 
            shader symbols that exist across both vertex and fragment shaders.
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/ANGLEWebKitBridge.cpp: Add logic for handling varyings 
            and add new fields to the ANGLEShaderSymbol struct.
        (WebCore::getSymbolInfo):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h: Add those same fields to the SymbolInfo struct 
            as well so that we can access them from our shader source map.
            Also add a map of varyings along side the uniforms and attributes.
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo):
        (WebCore::GraphicsContext3D::ShaderSourceEntry::symbolMap):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::areProgramSymbolsValid): Will be filled in later, this method 
            will use the shader source map to check for issues with unused varyings and precisions 
            mismatches of shader symbols that exist across both the vertex and fragment shaders.

2013-12-06  Lukasz Gajowy  <l.gajowy@samsung.com>

        [ATK] Missing aria roles mappings
        https://bugs.webkit.org/show_bug.cgi?id=117729

        Reviewed by Mario Sanchez Prada.

        Added a few mappings from ARIA roles to ATK roles.

        Test: accessibility/aria-mappings.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webkitwebaudiosrc element needs to emit stream-start, caps and segment events
        https://bugs.webkit.org/show_bug.cgi?id=123015

        Reviewed by Martin Robinson.

        When the source element starts emitting buffers send along various
        events to notify downstream elements.

        No new tests, change covered by existing webaudio tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init): Initialize segment.
        (webKitWebAudioSrcConstructed): Give an explicit name to each
        queue added in front of the interleave element.
        (webKitWebAudioSrcLoop): Before sending the first buffers push
        stream-start, caps and segment events on each queue's sinkpad.

2013-12-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Audio/Video sink management is incoherent
        https://bugs.webkit.org/show_bug.cgi?id=125304

        Reviewed by Gustavo Noronha Silva.

        Allow subclasses of MediaPlayerPrivateGStreamerBase to create
        custom audio/video sinks in a coherent manner using
        create{Audio,Video}Sink methods. Convenience getters are also
        available. Also removed some un-needed member variables in the
        playbin-based player.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::audioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::createAudioSink):

2013-12-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce IMAGE_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=125330

        Reviewed by Ryosuke Niwa.

        As a step to use TYPE_CASTS_BASE, this cl introduce IMAGE_TYPE_CASTS.
        BitmapImage and SVGImage can use it to generate toFoo() type case helper functions.

        No new tests, no behavior changes.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::resumeAnimatingImagesForLoader):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * svg/graphics/SVGImage.h:

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the forwarding headers of RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125323

        Reviewed by Ryosuke Niwa.

        In this patch, I removed the unnecessary forwarding headers from RenderBlock.h, and moved some to RenderBlockFlow.h.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: Remove unnecessary forwarding headers.
        * rendering/RenderBlockFlow.h: Moved some forwarding headers from RenderBlock.h

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * 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/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Sam Weinig.

        No new tests, just removing dead code.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::resetAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:

2013-12-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160133.
        http://trac.webkit.org/changeset/160133
        https://bugs.webkit.org/show_bug.cgi?id=125325

        broke bindings tests on all the bots (Requested by thorton on
        #webkit).

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * 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/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove 'cookiesString' output from Page.getCookies
        https://bugs.webkit.org/show_bug.cgi?id=125268

        Reviewed by Timothy Hatcher.

        Remove 'cookiesString' output from Page.getCookies protocol.
        It is no longer meaningful because it is an unused parameter.

        No new tests, no behavior change.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2013-12-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: expose node and frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124326

        Reviewed by Joseph Pecoraro.

        This adds snapshotRect() and snapshotNode() to the Page domain.
        Both methods create snapshots using FrameSnapshotting APIs
        and send images to the inspector frontend as a data URL.

        Remove the unimplemented Page.captureScreenshot API.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotNode): Added.
        (WebCore::InspectorPageAgent::snapshotRect): Added.
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json: Added new protocol APIs.

2013-12-04 Bear Travis <betravis@adobe.com>

    [CSS Shapes] Enable CSS Shapes on Windows
    https://bugs.webkit.org/show_bug.cgi?id=89957

    Reviewed by Brent Fulgham.

    * css/CSSPropertyNames.in: Tweak to ensure shapes properties are regenerated.

2013-12-05  Roger Fong  <roger_fong@apple.com>

        [WebGL] Make sure we satisfy uniform and varying packing restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=125124.
        <rdar://problem/15203291>

        Reviewed by Brent Fulgham.

        Tests covered by WebGL Khronos conformance tests:
        webgl/1.0.2/conformance/glsl/misc/shader-uniform-packing-restrictions.html
        webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-12-05  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        32bit buildfix after r160151
        https://bugs.webkit.org/show_bug.cgi?id=125298

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleDataReceived):

2013-12-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cropping and drawing ImageBuffers results in uninitialized data being shown
        https://bugs.webkit.org/show_bug.cgi?id=125271

        Reviewed by Simon Fraser.

        createCroppedImageIfNecessary() crops to the bottom left of the ImageBuffer
        backing store instead of the top left. In addition, ImageBuffer::draw()
        draws the entire ImageBuffer's backing store instead of just the relevant
        portion of it.

        No new tests are necessary because the existing tests already test this
        functionality

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Crop to the top left of the
        backing store 
        (WebCore::ImageBuffer::draw): Draw only the logical portion of the
        backing store 

2013-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale ScriptGlobalObject methods
        https://bugs.webkit.org/show_bug.cgi?id=125276

        Reviewed by Sam Weinig.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Change how the form element pointer affects parsing template elements, to reduce weirdness in templates
        https://bugs.webkit.org/show_bug.cgi?id=125279

        Reviewed by Antti Koivisto.

        Faithfully update the HTML5 parser after http://html5.org/tools/web-apps-tracker?from=8330&to=8331.

        Test: fast/dom/HTMLTemplateElement/no-form-association-2.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement): Don't the form element pointer if the context
        element or its ancestor is a template element.
        (WebCore::HTMLConstructionSite::insideTemplateElement): Added.
        (WebCore::HTMLConstructionSite::createHTMLElement): Renamed openElementsContainTemplateElement to
        insideTemplateElement to reflect the true semantics of the boolean.

        * html/parser/HTMLConstructionSite.h:

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): Ignore the form element pointer if there
        is a template element on the stack of open elements. This faithfully reflects what's being said in the
        specification. We should probably make isParsingTemplateContents more efficient by storing a boolean
        and then wrap from() in some helper function but that should probbaly happen in a separate patch.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Don't unset or rely on the form element pointer
        when there is a template element on the stack of open elements.

        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents): Added a trivial implementation for when
        TEMPLATE_ELEMENT is disabled.
        (WebCore::HTMLTreeBuilder::isParsingFragmentOrTemplateContents): Merged two implementations.

2013-12-05  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream] Firing negotiationneeded event upon track add/remove on MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=125243

        Reviewed by Eric Carlson.

        Spec states that: In particular, if an RTCPeerConnection object is consuming a MediaStream on which a track is
        added, by, e.g., the addTrack() method being invoked, the RTCPeerConnection object must fire the
        "negotiationneeded" event. Removal of media components must also trigger "negotiationneeded".

        Existing tests updated.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addObserver):
        (WebCore::MediaStream::removeObserver):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddOrRemoveTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):

2013-12-05  Beth Dakin  <bdakin@apple.com>

        Bad repaints on twitter when the tile cache has a margin
        https://bugs.webkit.org/show_bug.cgi?id=125263
        -and corresponding-
        <rdar://problem/15576884>

        Reviewed by Tim Horton.

        When tiles that used to be margin tiles become real-content tiles, they need to be 
        invalidated.

        Two new helper functions will make it so that we don’t have to manually factor out 
        the margin from the bounds in more than one place in the code.
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::boundsWithoutMargin):
        (WebCore::TileController::boundsAtLastRevalidateWithoutMargin):

         Here is one existing place where we used to factor out the margin, but now we can 
        call boundsWithoutMargin().
        (WebCore::TileController::adjustRectAtTileIndexForMargin):

        And here is where we invalidate the formerly-margin tiles.
        (WebCore::TileController::revalidateTiles):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Remove the forward declaration of BidiContext class from RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125265

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: BidiContext is not used in RenderBlock.h

2013-12-05  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Carlos Garcia Campos.

        This commit applies some changes proposed after the original patch has
        been landed. It fixes the logic to create the subsurface (as it was
        inverted). It also remove an unnecessary RefPtr variable to hold the
        subsurface.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Fix inset when only a subset of the arguments are defined
        https://bugs.webkit.org/show_bug.cgi?id=125277

        Reviewed by David Hyatt.

       I thought Length's default value is fixed-0, but actually it's auto-0. For the optional arguments
       of inset shape, we need to use fixed-0, so I updated the code and the tests to use that explicitly.

        No new tests, I updated the old ones.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use deprecated gtk-doc 'Rename to' tag
        https://bugs.webkit.org/show_bug.cgi?id=125303

        Reviewed by Philippe Normand.

        GObject introspection rename-to annotation is available in
        since version 0.6.3 so we should use that instead.

        * bindings/gobject/WebKitDOMEventTarget.h:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMDeprecated.symbols
        https://bugs.webkit.org/show_bug.cgi?id=125300

        Reviewed by Philippe Normand.

        Add webkit_dom_html_element_get_id and
        webkit_dom_html_element_set_id to the symbols files.

        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings symbols file after r159711.

        * bindings/gobject/webkitdom.symbols:

2013-12-05  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move platform sources free of layering violations under libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=117509

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.list.am: Move additional source files located in the platform layer under libPlatform.
        All moved sources are free of layering violations and thus ready for the migration.

2013-12-05  László Langó  <lango@inf.u-szeged.hu>

        Remove bridge/testqtbindings.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=125287

        Reviewed by Alexey Proskuryakov.

        * bridge/testqtbindings.cpp: Removed. There is no QT anymore.
        We don't need this file.

2013-12-04  Gurpreet Kaur  <k.gurpreet@samsung.com>

        % unit heights don't work if parent block height is set in vh
        https://bugs.webkit.org/show_bug.cgi?id=118516

        Reviewed by Simon Fraser.

        From Blink r156449 by <srinivasa.ragavan.venkateswaran@intel.com>

        An element having height as percentage needs to have the
        containingblock's height or availableheight to calculate its
        own height. The containing block having a height set in vh
        unit was not being considered for calculating the child's
        height.

        Tests: fast/css/viewport-percentage-compute-box-height.html
               fast/css/viewport-percentage-compute-box-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Correct child's height(in pecentage) was not being calculated
        incase of parent having height set in vh unit. Added condition
        to calculate the containing block height in terms of viewport size.

2013-12-04  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix. Copy headers from rendering/line to build directory.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Rubber-stamped by Anders Carlsson.

        Address Darin's comment to use fastGetAttribute instead of getAttribute.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::vlinkColor):

2013-12-04  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Darin Adler.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-12-04  Benjamin Poulain  <bpoulain@apple.com>

        Remove spaces on a blank line to have ResourceHandleCFNet.cpp identical to iOS

        Unreviewed.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2013-12-04  Antti Koivisto  <antti@apple.com>

        Move pseudo element construction out from Element
        https://bugs.webkit.org/show_bug.cgi?id=125257

        Reviewed by Anders Carlsson.

        This is logically part of the style resolve/render tree construction. This will make future
        refactoring easier.

        * dom/Element.cpp:
        * dom/Element.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::beforeOrAfterPseudoElement):
        (WebCore::Style::setBeforeOrAfterPseudoElement):
        (WebCore::Style::clearBeforeOrAfterPseudoElement):
        (WebCore::Style::needsPseudeElement):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move TrailingObjects class into its own h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=124956

        Reviewed by David Hyatt.

        Since I moved space-ignoring inline functions into MidpointState in r160074,
        I can nicely separate TrailingObjects class from BreakingContextInlineHeader.h.
        This change improves the readability, and it's part of the RenderBlockLineLayout
        refactoring campaign, which is tracked under bug #121261.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/TrailingObjects.cpp: Added.
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        * rendering/line/TrailingObjects.h: Added.
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * 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/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset for shape-outside
        <https://webkit.org/b/125112>

        Reviewed by David Hyatt.

        This patch adds inset support for shape-outside. Parsing has previously landed in r159968.
        Specification: http://dev.w3.org/csswg/css-shapes/#supported-basic-shapes

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset.html

        * platform/LengthSize.h:
        (WebCore::LengthSize::floatSize): Add conversion to FloatSize.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Handle inset case.

2013-12-04  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Support raster shape visualizations
        https://bugs.webkit.org/show_bug.cgi?id=124080

        Reviewed by Joseph Pecoraro.

        Create an inspector visualization for a shape created from an image.
        The visualization takes each line of the image, combining where possible.

        Test added to inspector-protocol/model/highlight-shape-outside.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::buildBoundsPath): Create a path representing the
        RasterShapeIntervals.
        * rendering/shapes/RasterShape.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove explicit numbering from BasicShape::Type and CSSBasicShape::Type enums
        https://bugs.webkit.org/show_bug.cgi?id=125163

        Reviewed by Rob Buis.

        I don't see any reason to have explicit numbering for the Type enum in our [CSS]BasicShape classes.
        I removed numbering, which will decrease for instance the merge conflicts on Type changes.

        No new tests, no behavior change.

        * css/CSSBasicShapes.h:
        * rendering/style/BasicShapes.h:

2013-12-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to use an IOSurface that is larger than necessary
        https://bugs.webkit.org/show_bug.cgi?id=124626

        Reviewed by Simon Fraser.

        Because creating ImageBuffer's backing store can be so expensive, it
        would be beneficial to have a pool of pre-created backing stores
        available. However, this means that ImageBuffer might have to use a
        backing store that is larger than the exact dimensions that it needs.
        This patch adds a field, m_backingStoreSize, to CG's ImageBufferData
        class, and uses this new field when performing ImageBuffer operations
        to allow for larger-than-necessary backing stores. Content is always
        drawn in the top left corner of the backing store.

        No new tests are necessary because there is no behavior change.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform): The base transform has to put
        content at the top left corner instead of bottom left
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Convenience function to figure out
        the dimensions of the backing texture in user space
        (WebCore::ImageBuffer::ImageBuffer): Set up new m_backingStoreSize member
        (WebCore::maybeCropToBounds): Some ImageBuffer API functions require
        outputting an image with logical size. This function performs the cropping
        (WebCore::ImageBuffer::copyImage): Updated for larger-than-necessary
        backing stores
        (WebCore::ImageBuffer::copyNativeImage): Ditto
        (WebCore::ImageBuffer::draw): Ditto
        (WebCore::ImageBuffer::clip): Ditto
        (WebCore::ImageBuffer::putByteArray): Ditto
        (WebCore::ImageBuffer::toDataURL): Ditto
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Ditto
        (WebCore::ImageBufferData::putData): Ditto
        * platform/graphics/cg/ImageBufferDataCG.h: New m_backingStoreSize field

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Support for texImage2D of type HALF_FLOAT_OES
        https://bugs.webkit.org/show_bug.cgi?id=110936

        Reviewed by Brent Fulgham.

        Add support for the HALF_FLOAT_OES texture format from texImage2D
        and texSubImage2D.

        A lot of this patch comes from the original patch on the bug
        by Nayan Kumar, and the Blink commit:
        https://codereview.chromium.org/13842017

        Tests: fast/canvas/webgl/oes-texture-half-float-with-canvas.html
               fast/canvas/webgl/oes-texture-half-float-with-image.html
               fast/canvas/webgl/oes-texture-half-float-with-video.html

        * html/canvas/OESTextureHalfFloat.idl: New HALF_FLOAT_OES constant value.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFunc): Remove the code that
        would bail if half-float values were used.
        * platform/graphics/GraphicsContext3D.cpp:
        - Return appropriate DataFormats for half floating point types.
        - Copy the float -> half-float code from Blink
        - New pack functions for half floats
        * platform/graphics/GraphicsContext3D.h: New format types.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D): Use GL_HALF_FLOAT_ARB if we're passed
        a HALF_FLOAT_OES.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Fix the Apple Windows build after <http://trac.webkit.org/changeset/160113>
        (https://bugs.webkit.org/show_bug.cgi?id=125193)

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Substitute paintInfo for i.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Rename RenderTheme::paintMenuListButton()
        https://bugs.webkit.org/show_bug.cgi?id=125193

        Reviewed by Simon Fraser.

        Towards upstreaming the iOS concept of render theme decorations we should rename
        RenderTheme::paintMenuListButton() to RenderTheme::paintMenuListButtonDecorations()
        to better describe its purpose.

        Also, fix code style issues.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMenuListButtonDecorations):
        * platform/blackberry/RenderThemeBlackBerry.h:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMenuListButtonDecorations):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMenuListButtonDecorations):
        * platform/gtk/RenderThemeGtk.h:
        * platform/nix/RenderThemeNix.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintDecorations): Rename argument o, r to renderer and rect, respectively.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations): Rename argument o, r to renderer and rect,
        respectively; also remove extraneous white space and substitute 1 for 1.0f.
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Rename argument o, i, r to renderer, paintInfo, and rect,
        respectively.
        (WebCore::RenderThemeWin::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintMenuList): Ditto.
        (WebCore::RenderThemeWinCE::paintMenuListButtonDecorations): Ditto. 
        * rendering/RenderThemeWinCE.h:

2013-12-04  Andy Estes  <aestes@apple.com>

        [iOS] Build projects with $(ARCHS_STANDARD_32_64_BIT)
        https://bugs.webkit.org/show_bug.cgi?id=125236

        Reviewed by Sam Weinig.

        $(ARCHS_STANDARD_32_64_BIT) is what we want for both device and simulator builds.

        * Configurations/DebugRelease.xcconfig:

2013-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix attempt after r160099.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push Remote Inspector debugging connection management into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=124613

        Reviewed by Timothy Hatcher.

        Make a WebCore::Page a "Web" Remote Debuggable.

        * bindings/js/JSDOMGlobalObject.cpp:
        Disable JavaScript context inspection on JSGlobalObjects inside WebCore::Page's.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::remoteInspectionAllowed):
        (WebCore::Page::setRemoteInspectionAllowed):
        (WebCore::Page::remoteInspectorInformationDidChange):
        * page/Page.h:
        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp: Added.
        (WebCore::PageDebuggable::PageDebuggable):
        (WebCore::PageDebuggable::name):
        (WebCore::PageDebuggable::url):
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        Make a page a "Web" debuggable.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Misc.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::indicate):
        (WebCore::InspectorClient::hideIndicate):
        Forward indicate methods to WebKit clients.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        Push updates when remote debuggable information like the Page's
        URL or title change.

        * ForwardingHeaders/inspector/InspectorFrontendChannel.h:
        * inspector/InspectorForwarding.h:
        Re-export Inspector::InspectorFrontendChannel as WebCore::InspectorFrontendChannel
        to avoid needlessly updating code all over the place.

        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * testing/Internals.cpp:
        Update include names.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        Make the "Inspect Element" context menu work correctly when there is a
        remote inspector instead of a local inspector.

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add missing folders and files to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=124802

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj:

2013-12-04  José Dapena Paz  <jdapena@igalia.com>

        [texmap] Borders on rotating images are hidden/wrongly rendered with edge distance antialiasing
        https://bugs.webkit.org/show_bug.cgi?id=124653

        Reviewed by Noam Rosenthal.

        Texture mapper edge distance antialiasing texture sampling was causing
        borders to be shaded (and made them almost disappear in some cases).
        This was because calculation of sampling happened on vertex shader, so
        the border of the texture would go to the border of the inflation area.

        What algorithm should do is sampling the border pixel for all the
        inflation area (it is the closest pixel to all the samples in
        inflation area), and then use the standard sampling for the other
        parts of the texture.

        No new test because this is already covered by test
        transforms/3d/point-mapping/3d-point-mapping.html

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp: fix edge
        distance antialiasing texture sampling.

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        Typo fix after r160074 to fix debug builds.

        Reviewed by Csaba Osztrogonác.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::stopIgnoringSpaces):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move space-ignoring inline functions into MidpointState
        <https://webkit.org/b/124957>

        Reviewed by David Hyatt.

        Since:
         - The following inline functions were used only with a mandatory LineMidpointState argument:
           startIgnoringSpaces, stopIgnoringSpaces, ensureLineBoxInsideIgnoredSpaces, deprecatedAddMidpoint.
         - TrailingObjects class uses these functions. Since they're inline in BreakingContextInlineHeaders.h,
           it's hard to separate TrailingObjects into it's own file. (blocks bug #124956)
         I made these functions as a member of LineMidpointState, and I also updated the call sites.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::MidpointState::deprecatedAddMidpoint):
        * rendering/RenderBlock.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):

2013-12-03  Zoltan Horvath  <zoltan@webkit.org>

        Remove BreakingContext's friendship from RenderBlockFlow
        <https://webkit.org/b/124958>

        Reviewed by David Hyatt.

        BreakingContext uses only 2 functions from RenderBlockFlow: insertFloatingObject/positionNewFloatOnLine. I added helper
        functions to LineBreaker, what is already a friend of RenderBlockFlow, so BreakingContext doesn't need to be anymore.
 
        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::insertFloatingObject):
        (WebCore::LineBreaker::positionNewFloatOnLine):

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/49b1eeabbbf573d5271288c66d2b566cf33a09cf

        These member functions of HTMLBodyElement were only used by corresponding functions in HTMLDocument
        since they had the Reflect option specified in HTMLBodyElement.idl.

        Removed the functions and directly called getAttribute and setAttribute in relevant functions in
        HTMLDocument. The optimization to avoid assignment is no longer needed here since we've added that
        optimization to setAttributeInternal a while ago.

        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLDocument.h:

2013-12-03  Andreas Kling  <akling@apple.com>

        Add a CSSProperty::isDirectionAwareProperty() helper.
        <https://webkit.org/b/125202>

        Move the block of case labels for checking whether a CSS property ID
        is a directional property into a separate function. Also removed an
        outdated comment about CSS variables.

        Reviewed by Antti Koivisto.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the inadvertently committed change.

        * html/HTMLElement.idl:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Remove nodeIsDetachedFromDocument and visualWordMovementEnabled in FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=125210

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/92409870f0ff8fafe31217830db0838a9e1ffb98

        Removed some unused code.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced):
        * editing/FrameSelection.h:
        * page/Settings.in:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Potential crash in RenderView::selectionBounds and RenderView::repaintSelection
        https://bugs.webkit.org/show_bug.cgi?id=125207

        Reviewed by Simon Fraser.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/f9e6e288a5aa959f05c374806121aaf0fc52d440

        Update style in FrameSelection instead of RenderView's member functions. These are the last two
        member functions of RenderView that updates the style.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::bounds):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::repaintSelection):

2013-12-03  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/125143> Improve the formatting in the generated Objective-C headers.

        Add a space between @property and any parenthesized attributes.
        Prefer strong over retain when specifying memory management semantics.

        Reviewed by Darin Adler.

        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetPropertyAttributes): Generate strong instead of retain. Include a
        space before the parenthesis.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Update WebCrypto JWK mapping to newer proposal
        https://bugs.webkit.org/show_bug.cgi?id=124218

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/jwk-export-use-values.html
               crypto/subtle/jwk-import-use-values.html

        1. "extractable" renamed to "ext" in JWK.
        2. New values for "use" mapping, which can now be combined into comma separated lists,
        and cover all possible WebCrypto usages.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::processUseValue):
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):

2013-12-03  Simon Fraser  <simon.fraser@apple.com>

        Remove some iOS-related documentScale code
        https://bugs.webkit.org/show_bug.cgi?id=125194

        Reviewed by Enrica Casucci.

        Remove exports of nonexistent documentScale-related functions on Frame.

        * WebCore.exp.in:

2013-12-03  Eric Carlson  <eric.carlson@apple.com>

        Fix regression caused by r158599
        https://bugs.webkit.org/show_bug.cgi?id=125188

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::clearMediaPlayer): Do not clear m_player when PLUGIN_PROXY_FOR_VIDEO
            is enabled.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Updating WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=124981

        Reviewed by Benjamin Poulain.

        Just to sync our github repo files and the trunk, as part of the upstream process

        No new tests needed.

        * PlatformNix.cmake:
        * css/mediaControlsNix.css:
        (audio):
        (video::-webkit-media-controls):
        (audio::-webkit-media-controls-enclosure, video::-webkit-media-controls-enclosure):
        (video::-webkit-media-controls-enclosure):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media):
        (audio:-webkit-full-page-media, video:-webkit-full-page-media):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-overlay-play-button, video::-webkit-media-controls-overlay-play-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-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, video::-webkit-media-controls-volume-slider):
        (input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-media-slider-container > div):
        (input[type="range"]::-webkit-media-slider-thumb):
        (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):
        (audio::-webkit-media-controls-fullscreen-volume-slider, video::-webkit-media-controls-fullscreen-volume-slider):
        (audio::-webkit-media-controls-fullscreen-volume-min-button, video::-webkit-media-controls-fullscreen-volume-min-button):
        (audio::-webkit-media-controls-fullscreen-volume-max-button, video::-webkit-media-controls-fullscreen-volume-max-button):
        (video::-webkit-media-text-track-container):
        (video::cue):
        (video::-webkit-media-text-track-region):
        (video::-webkit-media-text-track-region-container):
        (video::-webkit-media-text-track-region-container.scrolling):
        (video::-webkit-media-text-track-display):
        (video::cue(:future)):
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):
        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * platform/Cursor.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/nix/AudioBusNix.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/graphics/GLContext.h:
        * platform/nix/CursorNix.cpp:
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/nix/GamepadsNix.cpp:
        (WebCore::sampleGamepads):
        * platform/nix/RenderThemeNix.cpp:
        (WebCore::toIntSize):
        (WebCore::toNixRect):
        (WebCore::RenderThemeNix::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformInactiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformFocusRingColor):
        (WebCore::RenderThemeNix::platformTapHighlightColor):
        (WebCore::RenderThemeNix::paintButton):
        (WebCore::RenderThemeNix::paintTextField):
        (WebCore::RenderThemeNix::paintCheckbox):
        (WebCore::RenderThemeNix::setCheckboxSize):
        (WebCore::RenderThemeNix::paintRadio):
        (WebCore::RenderThemeNix::setRadioSize):
        (WebCore::RenderThemeNix::paintMenuList):
        (WebCore::RenderThemeNix::paintProgressBar):
        (WebCore::RenderThemeNix::paintSliderTrack):
        (WebCore::RenderThemeNix::paintSliderThumb):
        (WebCore::RenderThemeNix::paintInnerSpinButton):
        (WebCore::RenderThemeNix::paintMeter):
        (WebCore::RenderThemeNix::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeNix::paintMediaPlayButton):
        (WebCore::RenderThemeNix::paintMediaMuteButton):
        (WebCore::RenderThemeNix::paintMediaSeekBackButton):
        (WebCore::RenderThemeNix::paintMediaSeekForwardButton):
        (WebCore::RenderThemeNix::paintMediaSliderTrack):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeNix::paintMediaRewindButton):
        * platform/nix/RenderThemeNix.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-12-03  Ralph Thomas  <ralpht@gmail.com>

        Typo: FixedPositionConstaint -> FixedPositionConstraint
        https://bugs.webkit.org/show_bug.cgi?id=125171

        Reviewed by Simon Fraser.

        No new tests, no change in behavior.

        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

2013-12-03  Samuel White  <samuel_white@apple.com>

        AXPress event coordinates are always sent as (0, 0)
        https://bugs.webkit.org/show_bug.cgi?id=76677

        Reviewed by Simon Fraser.

        Set the coordinates of a simulated press equal to the center of the target
        element when the simulated press does not have a related mouse event.

        Test: accessibility/press-targets-center-point.html

        * dom/Element.cpp:
        (WebCore::Element::clientRect):
        (WebCore::Element::screenRect):
        * dom/Element.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::create):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Implement OES texture float linear
        https://bugs.webkit.org/show_bug.cgi?id=124871

        Reviewed by Brent Fulgham.

        Implement the OES_texture_float_linear extension. Generally
        we'd also enable OES_texture_half_float_linear at the same
        time, but that's blocked on webkit.org/b/110936.

        Test: fast/canvas/webgl/oes-texture-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map the new name into the appropriate type.

        * html/canvas/OESTextureFloatLinear.cpp: Added. This is a very simple class
        that's mostly empty.
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::~OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::getName):
        (WebCore::OESTextureFloatLinear::create):
        * html/canvas/OESTextureFloatLinear.h: Added.
        * html/canvas/OESTextureFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Declare the new name in the enum of extensions.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawArrays): Call new name.
        (WebCore::WebGLRenderingContext::drawElements): Call new name.
        (WebCore::WebGLRenderingContext::getExtension): Create the new extension if asked.
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Renamed from handleNPOTTextures. Now
        checks for the type of the texture too.
        * html/canvas/WebGLRenderingContext.h: Member variable for new extension.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Takes an extra parameter which indicates
        if it has an extension enabled.
        (WebCore::WebGLTexture::update): Note it is a float type when updating.
        * html/canvas/WebGLTexture.h: New flag to indicate float type.

        * platform/graphics/Extensions3D.h: New flag type.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Add a comment about the extension.

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Support exporting private WebCrypto RSA keys
        https://bugs.webkit.org/show_bug.cgi?id=124483

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/rsa-export-private-key.html

        It might be better to have our own bignum implementation in WTF, but we currently
        don't, and the need for this computation is Common Crypto specific anyway.

        * crypto/CommonCryptoUtilities.h:
        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::CCBigNum::CCBigNum):
        (WebCore::CCBigNum::~CCBigNum):
        (WebCore::CCBigNum::operator=):
        (WebCore::CCBigNum::data):
        (WebCore::CCBigNum::operator-):
        (WebCore::CCBigNum::operator%):
        (WebCore::CCBigNum::inverse):
        Added a minimal wrapper around CommonCrypto BigNum.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents): Compute missing parts using CCBigNum.
        (WebCore::CryptoKeyRSA::exportData): Implemented private key case.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        XML fragment parsing algorithm doesn't use the context element's default namespace URI
        https://bugs.webkit.org/show_bug.cgi?id=125132

        Reviewed by Darin Adler.

        Always use the context element's namespace as the default namespace URI when one is not specified by xmlns.

        The new behavior matches that of Internet Explorer and the specified behavior in HTML5:
        http://www.w3.org/TR/2013/CR-html5-20130806/the-xhtml-syntax.html#parsing-xhtml-fragments

        "The default namespace is the namespace for which the DOM isDefaultNamespace() method on the element would
        return true."

        Test: fast/parser/fragment-parsing-in-document-without-xmlns.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-12-03  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove some CSS Variables leftovers
        https://bugs.webkit.org/show_bug.cgi?id=125167

        Reviewed by Darin Adler.

        No new tests needed. Only removing leftover code.

        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:

2013-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Checking second-to-last bit in address is a typo
        https://bugs.webkit.org/show_bug.cgi?id=125162

        Reviewed by Darin Adler.

        After talking with the original author of this line,
        is was a typo to make sure that the second-to-last bit
        in an address is 0. Instead, we want to make sure that
        the address is aligned to a 4-byte boundary

        No behavior change, so no test is necessary

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2013-12-03  Radu Stavila  <stavila@adobe.com>

        The overflow border of a relatively positioned element inside a region is not painted
        https://bugs.webkit.org/show_bug.cgi?id=124919

        Relative positioned elements have self-painting layers that don't propagate the visual overflow
        so the layer's position should be used when determining the clipping rectangle for box decorations.

        Reviewed by Mihnea Ovidenie.

        Test: fast/regions/relative-borders-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of 'hasFrontend()' in InspectorController and WorkerInspectorController
        https://bugs.webkit.org/show_bug.cgi?id=125135

        Reviewed by Darin Adler.

        Remove 'hasFrontend()' from InspectorController and WorkerInspectorController
        as it's never called.

        No new tests, no behavior changes.

        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.h:

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: webViewResized() is not used anywhere in WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=125137

        Reviewed by Darin Adler.

        Remove leftover code.

        No new tests, no behavior changes.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:

2013-12-03  László Langó  <lango@inf.u-szeged.hu>

        ASSERTION FAILED: !value || (value->isPrimitiveValue()) in WebCore::StyleProperties::getLayeredShorthandValue.
        https://bugs.webkit.org/show_bug.cgi?id=125146

        Reviewed by Darin Adler.

        Do not presume that |yValue| is primitive if |value| is implicit in StylePropertySerializer.
        An implicit y-value can become explicit if specified as a separate longhand.
        At the same time, its new value can be non-primitive.

        Backported from Blink:
        http://src.chromium.org/viewvc/blink?view=rev&rev=153678

        Test: fast/css/webkit-mask-crash-implicit.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        Fix build break after r160007.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        [css shapes] layout for new ellipse syntax
        https://bugs.webkit.org/show_bug.cgi?id=124621

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new ellipse shape syntax,
        including basic animation support.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-000.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new ellipse to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore ellipses with values that
            cannot be interpolated.
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox): Helper function to calculate
            either radiusX or radiusY, shared by clip-path and shape code paths.
        (WebCore::BasicShapeEllipse::path):
        * rendering/style/BasicShapes.h:

2013-12-03  Frédéric Wang  <fred.wang@free.fr>

        Add an MathMLSelectElement class to implement <maction> and <semantics>.
        <https://webkit.org/b/120058>

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/maction-dynamic.html
               mathml/presentation/maction.html
               mathml/presentation/semantics.html

        This adds a new MathMLSelectElement class to prepare the implementation
        of the <maction> and <semantics> elements, for which only one "selected"
        child is visible. We now simply display the first child of the
        <semantics> element instead of hiding the annotations and this allows to
        handle the use case of SVG-in-MathML as generated by Instiki when
        bug 124128 is fixed ; Gecko's selection algorithm will be implemented
        later (bug 100626). We now also rely on the @actiontype and @selection
        attributes to select the visible <maction> child ; It remains to deal
        with the user interaction (bug 85734).

        * CMakeLists.txt: add the new files.
        * GNUmakefile.list.am: ditto
        * Target.pri: ditto
        * WebCore.vcxproj/WebCore.vcxproj: ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove the CSS rule for annotation/annotation-xml.
        * mathml/MathMLAllInOne.cpp: add the new cpp file.
        * mathml/MathMLSelectElement.cpp: Added.
        (WebCore::MathMLSelectElement::MathMLSelectElement):
        (WebCore::MathMLSelectElement::create):
        (WebCore::MathMLSelectElement::createRenderer):
        (WebCore::MathMLSelectElement::childShouldCreateRenderer):
        (WebCore::MathMLSelectElement::finishParsingChildren):
        (WebCore::MathMLSelectElement::childrenChanged):
        (WebCore::MathMLSelectElement::attributeChanged):
        (WebCore::MathMLSelectElement::updateSelectedChild): basic implementation for maction, semantics, maction@actiontype and maction@selection.
        * mathml/MathMLSelectElement.h: Added.
        * mathml/mathattrs.in: add actiontype and selection attributes.
        * mathml/mathtags.in: set element classes for maction, semantics, annotation and annotation-xml.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding missing nix new files to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124987

        Reviewed by Benjamin Poulain.

        No new tests needed.

        * PlatformNix.cmake:
        * platform/nix/ErrorsNix.cpp: Added.
        * platform/nix/ErrorsNix.h: Added.
        * platform/nix/FileSystemNix.cpp: Added.
        * platform/nix/MIMETypeRegistryNix.cpp: Added.
        * platform/nix/SharedTimerNix.cpp: Added.
        * platform/nix/TemporaryLinkStubs.cpp: Added.

2013-12-03  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Correct broken build on efl port with --no-netscape-plugin-api
        configuration.
        https://bugs.webkit.org/show_bug.cgi?id=123997

        Reviewed by Zoltan Herczeg.

        Build failed on efl port with --no-netscape-plugin-api configuration
        as ld did not found some methods. The configuration uses a minimal
        empty implementation of the class, which is now extended with empty
        method implementations.

        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::createPackage):
          Returns NULL pointer.
        (WebCore::PluginPackage::hash):
          Returns 0.
        (WebCore::PluginPackage::equal):
          Returns true (equals).
        (WebCore::PluginPackage::compare):
          Returns 0 (equals).
        (WebCore::PluginPackage::~PluginPackage):
          Do nothing.

2013-12-02  Andreas Kling  <akling@apple.com>

        Avoid setting style twice for generated image content.
        <https://webkit.org/b/125128>

        Take care of a FIXME I added in r158097 and avoid redundant work in
        ImageContentData::createRenderer().

        I changed the inheritance helper RenderImage::setPseudoStyle() into
        a new createStyleInheritingFromPseudoStyle() function instead so it
        can be used from both PseudoElement and ImageContentData.

        Reviewed by Antti Koivisto.

2013-12-02  Samuel White  <samuel_white@apple.com>

        AX: Add AXUIElementCountForSearchPredicate parameterized attribute.
        https://bugs.webkit.org/show_bug.cgi?id=124561

        Reviewed by Chris Fleizach.

        Added ability to fetch the number of elements that match a specific criteria. This will enable VoiceOver
        to interface with WebKit much more dynamically. We can now get an idea of how many interesting elements
        exist on a page, and then fetch them in chunks as needed.

        Test: platform/mac/accessibility/search-predicate-element-count.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityTextSearchMatch):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySearchCriteria::AccessibilitySearchCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-12-02  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Layout support for new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124619

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new circle shape syntax,
        inclduing basic animation support.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-circle-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-003.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-004.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-005.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::floatValueForCenterCoordinate): Used by both the CSS Shapes
            layout code and the clip path code.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Update to use appendLiteral, and remove
            call to reserveCapacity - if we find that it's actually slow when
            doing performance tests, we can hopefully do something smarter and
            less ugly than that.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Fix a logic error that caused
            the radius keywords not to work properly.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new circle to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore circles with values that
            cannot be interpolated.
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox): Convert circle
            radius keywords to a float value.
        (WebCore::BasicShapeCircle::path):
        (WebCore::BasicShapeCircle::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::canBlend):
        (WebCore::BasicShapeRadius::canBlend):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto HMAC doesn't check key algorithm's hash
        https://bugs.webkit.org/show_bug.cgi?id=125114

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-check-algorithm.html

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches): Check it.

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

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        FrameLoader::loadProgressingStatusChanged() might be called while the Frame has a null FrameView.

        It’s unclear how to reproduce, but there’s no harm in a null check.

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

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

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        It’s possible to have a null m_originatingProgressFrame when the heartbeat timer fires.

        On the surface this seems impossible because the only time m_originatingProgressFrame is cleared
        out the heartbeat timer is also stopped.

        But there’s likely still a race condition in multi-threaded environments.

        There’s no harm in null-checking m_originatingProgressFrame before accessing its loader.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):

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

        Add more CachedPage null checks
        https://bugs.webkit.org/show_bug.cgi?id=125106

        Reviewed by Sam Weinig.

        Only some functions in PageCache.cpp null-check the CachedPages in HistoryItems.

        Every part that manipulates the CachedPage should.

        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        (WebCore::PageCache::markPagesForFullStyleRecalc):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged):

2013-12-02  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset parsing
        https://bugs.webkit.org/show_bug.cgi?id=124903

        Reviewed by David Hyatt.

        In this patch I added support for inset shape parsing for CSS Shapes. Inset is defined
        by CSS Shapes Level 1 (http://dev.w3.org/csswg/css-shapes-1/#supported-basic-shapes).
        Inset is going to be used by shape-outside (bug #124905), and eventually by shape-inside.

        No new tests, I updated existing tests to cover the changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape): Add support for inset.
        (WebCore::basicShapeForValue): Add support for inset.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetString): Create inset css string.
        (WebCore::CSSBasicShapeInset::cssText): Convert inset shape to a CSS string.
        (WebCore::CSSBasicShapeInset::equals): Compare two inset rectangles.
        (WebCore::CSSBasicShapeInset::serializeResolvingVariables): Create an inset string, with CSS variables resolved.
        (WebCore::CSSBasicShapeInset::hasVariableReference): Determine if this inset has any CSS Variable references.
        * css/CSSBasicShapes.h: Add inset class.
        (WebCore::CSSBasicShapeInset::create):
        (WebCore::CSSBasicShapeInset::top):
        (WebCore::CSSBasicShapeInset::right):
        (WebCore::CSSBasicShapeInset::bottom):
        (WebCore::CSSBasicShapeInset::left):
        (WebCore::CSSBasicShapeInset::topLeftRadius):
        (WebCore::CSSBasicShapeInset::topRightRadius):
        (WebCore::CSSBasicShapeInset::bottomRightRadius):
        (WebCore::CSSBasicShapeInset::bottomLeftRadius):
        (WebCore::CSSBasicShapeInset::setTop):
        (WebCore::CSSBasicShapeInset::setRight):
        (WebCore::CSSBasicShapeInset::setBottom):
        (WebCore::CSSBasicShapeInset::setLeft):
        (WebCore::CSSBasicShapeInset::setTopLeftRadius):
        (WebCore::CSSBasicShapeInset::setTopRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomLeftRadius):
        (WebCore::CSSBasicShapeInset::CSSBasicShapeInset):
        * css/CSSParser.cpp:
        (WebCore::completeBorderRadii): Move static function before parseInsetBorderRadius.
        (WebCore::CSSParser::parseInsetRoundedCorners): I added this helper function for parsing the rounded corners
        (WebCore::CSSParser::parseBasicShapeInset): Parse inset.
        (WebCore::CSSParser::parseBasicShape): Add call to parse inset.
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add constructor for LengthSize.
        (WebCore::CSSPrimitiveValue::init): Initialize LengthSize.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create): Add support for creating PrimitiveValue from LengthSize.
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue): Add support for LengthSize.
        * platform/LengthSize.h:
        (WebCore::LengthSize::blend): Add blend for LengthSize.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Keep inset disabled for shape-inside now.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Calculate path for an inset.
        (WebCore::BasicShapeInset::blend): Blend two insets.
        * rendering/style/BasicShapes.h: Add higher level inset.
        (WebCore::BasicShapeInset::create):
        (WebCore::BasicShapeInset::top):
        (WebCore::BasicShapeInset::right):
        (WebCore::BasicShapeInset::bottom):
        (WebCore::BasicShapeInset::left):
        (WebCore::BasicShapeInset::topLeftRadius):
        (WebCore::BasicShapeInset::topRightRadius):
        (WebCore::BasicShapeInset::bottomRightRadius):
        (WebCore::BasicShapeInset::bottomLeftRadius):
        (WebCore::BasicShapeInset::setTop):
        (WebCore::BasicShapeInset::setRight):
        (WebCore::BasicShapeInset::setBottom):
        (WebCore::BasicShapeInset::setLeft):
        (WebCore::BasicShapeInset::setTopLeftRadius):
        (WebCore::BasicShapeInset::setTopRightRadius):
        (WebCore::BasicShapeInset::setBottomRightRadius):
        (WebCore::BasicShapeInset::setBottomLeftRadius):
        (WebCore::BasicShapeInset::BasicShapeInset):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Support WebCrypto AES-KW
        https://bugs.webkit.org/show_bug.cgi?id=125105

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/aes-kw-key-manipulation.html
               crypto/subtle/aes-kw-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: (WebCore::CryptoAlgorithmIdentifier): Added AES-KW.
        It's not standardized yet, but there appears to be a consensus that it will be specified.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        Added AES-KW cases everywhere.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support importing/exporting AES-KW keys in JWK.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        Added some accidentally forgotten std::moves.

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmAES_KW.h: Added.
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp: Added.

        * crypto/keys/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::CryptoKeyAES): Allow AES-KW
        as valid algorithm for AES keys.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-KW.

2013-12-02  Beth Dakin  <bdakin@apple.com>

        Add a setting to opt into a mode where the background extends and fixed elements 
        don't move on rubber-band
        https://bugs.webkit.org/show_bug.cgi?id=124745

        Reviewed by Tim Horton.

        New setting backgroundShouldExtendBeyondPage() will cause the tile cache to have a 
        margin, and it will also cause fixed elements and backgrounds to stick to the 
        viewport on scroll instead of sticking to the document. 

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/Settings.in:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2013-12-02  Roger Zanoni  <rogerzanoni@gmail.com>

        [MediaStream] Use iterator-based loops instead of index-based loops
        https://bugs.webkit.org/show_bug.cgi?id=125021

        Reviewed by Eric Carlson.

        Also, changing iterator variable names from iter to it and
        initializing an 'end' variable in each loop instead of evaluating
        'collection.end()' multiple times.

        No new tests, covered by existing ones.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackDidEnd):
        (WebCore::MediaStream::scheduledEventTimerFired):

2013-12-02  Rob Buis  <rob.buis@samsung.com>

        [css shapes] Parse new ellipse shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124620

        Reviewed by Dirk Schulze.

        Implement parsing of the new ellipse shape syntax. This closely follows the patch
        for the new circle syntax (https://bugs.webkit.org/show_bug.cgi?id=124618), with
        some refactoring of functionality shared by both.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::BasicShapeRadiusToCSSValue):
        (WebCore::valueForBasicShape):
        (WebCore::CSSValueToBasicShapeRadius):
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildDeprecatedEllipseString):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSDeprecatedBasicShapeEllipse::create):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::CSSDeprecatedBasicShapeEllipse):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeEllipse):
        (WebCore::CSSParser::parseDeprecatedBasicShapeEllipse):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::DeprecatedBasicShapeEllipse::path):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::path):
        (WebCore::BasicShapeEllipse::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeEllipse::centerX):
        (WebCore::BasicShapeEllipse::centerY):
        (WebCore::BasicShapeEllipse::radiusX):
        (WebCore::BasicShapeEllipse::radiusY):
        (WebCore::BasicShapeEllipse::setCenterX):
        (WebCore::BasicShapeEllipse::setCenterY):
        (WebCore::BasicShapeEllipse::setRadiusX):
        (WebCore::BasicShapeEllipse::setRadiusY):
        (WebCore::BasicShapeEllipse::BasicShapeEllipse):
        (WebCore::DeprecatedBasicShapeEllipse::create):
        (WebCore::DeprecatedBasicShapeEllipse::DeprecatedBasicShapeEllipse):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:

2013-12-02  Brendan Long  <b.long@cablelabs.com>

        Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
        https://bugs.webkit.org/show_bug.cgi?id=124811

        Reviewed by Eric Carlson.

        No new tests because this is just refactoring.

        * html/track/TrackListBase.cpp:
        (TrackListBase::TrackListBase): Replace event code with a GenericEventQueue.
        (TrackListBase::scheduleTrackEvent): Factor out duplicate code in schedule{Add,Remove}TrackEvent functions.
        (TrackListBase::scheduleAddTrackEvent): Same.
        (TrackListBase::scheduleRemoveTrackEvent): Same.
        (TrackListBase::scheduleChangeEvent): Use GenericEventQueue.
        * html/track/TrackListBase.h: Replace event code with GenericEventQueue.

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Fix an automatic merge failure by re-adding
        CryptoAlgorithmRsaOaepParams.h.

2013-12-02  Victor Jaquez  <vjaquez@igalia.com>

        [Gstreamer] update webkitvideosink metadata
        https://bugs.webkit.org/show_bug.cgi?id=125082

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_class_init):

2013-12-02  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Simplify MediaPlayerPrivateGStreamerBase::createVideoSink()
        https://bugs.webkit.org/show_bug.cgi?id=125077

        Remove the method's unused parameter.
        Remove the GStreamer 0.10.22 run-time validation, since we are using
        GStreamer 1.0 officially.
        Remove the creation of a spurious Bin for the video sink, since
        either the fpssink or the webkitsink are valid sink elements.
        Change fpsink to a GRefPtr.

        Now, createVideoSink() returns a simple pointer to the created sink
        element.

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsa-oaep-key-manipulation.html
               crypto/subtle/rsa-oaep-plaintext-length.html
               crypto/subtle/rsa-oaep-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaOaepParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        Added RSA-OAEP parameters.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support RSA-OAEP in JWK. It is more limited than general WebCrypto, as JWK only
        allows SHA-1 as hash.

        * crypto/CommonCryptoUtilities.cpp: Added. (WebCore::getCommonCryptoDigestAlgorithm):
        * crypto/CommonCryptoUtilities.h: Added.
        Extracted some shared code and forward declarations for CommonCrypto.

        * crypto/CryptoAlgorithmParameters.h: (WebCore::CryptoAlgorithmParameters::Class):
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h: Added.
        Added RsaOaepParams.

        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h: Added.
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::getCommonCryptoHMACAlgorithm):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        Use CommonCryptoUtilities.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register RSA-OAEP.

2013-12-02  Andres Gomez  <agomez@igalia.com>

        [GTK] Fails to build with freetype 2.5.1
        https://bugs.webkit.org/show_bug.cgi?id=125074

        Reviewed by Carlos Garcia Campos.

        FreeType specifies a canonical way of including their own
        headers. Now, we are following this recommendation so the
        compilation won't be broken again due to an upgrade in FeeType's
        including paths.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

2013-12-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::commonTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=125042

        Reviewed by Mario Sanchez Prada.

        When an AX text marker that references a node in a detached document is used to create a text marker range, a crash occurs
        because the method to determine commonTreeScopes does not account for when there are no common tree scopes.

        Test: platform/mac/accessibility/ordered-textmarker-crash.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions):
        * dom/TreeScope.cpp:
        (WebCore::commonTreeScope):

2013-12-02  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix a crash in the webaudio source provider when the audio track is going away.
        https://bugs.webkit.org/show_bug.cgi?id=124975

        Reviewed by Philippe Normand.

        Merged https://chromium.googlesource.com/chromium/blink/+/b21838b32bf11b1a972dfc449ddde71115490c23

        Before this patch, it was hitting a use-after-free crash  when the audio
        track in the media stream is going away and the webaudio mediastreamsourcenode
        is still running.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource): Passing audio track
        pointer to MediaStreamAudioSourceNode constructor.
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h: Added
        MediaStreamTrack class variable and change the constructor to receive
        it as parameter.

2013-12-02  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Support active state for listbox elements.
        https://bugs.webkit.org/show_bug.cgi?id=125009

        Reviewed by Chris Fleizach.

        Added support for ATK_STATE_ACTIVE for listbox elements.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2013-12-02  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused functions from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=125061

        Reviewed by Antoine Quint.

        Get rid of unused functions, redundant inclusion and forward declaration.

        No new tests, no behavior changes.

        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:

2013-12-02  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix build warning in EventHandler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=125010

        Reviewed by Csaba Osztrogonác.

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

2013-12-02  Attila Dusnoki  <adusnoki@inf.u-szeged.hu>

        HTML5 required attribute validation messages implemented.
        https://bugs.webkit.org/show_bug.cgi?id=125003

        Reviewed by Gyuyoung Kim.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):

2013-12-01  Andreas Kling  <akling@apple.com>

        SVG: Intersection/enclosure checks should use RenderElement.
        <https://webkit.org/b/125058>

        Make RenderSVGModelObject's checkIntersection() and checkEnclosure()
        take RenderElement* instead of RenderObject*. They are only ever
        called with SVGElement's renderers.

        Reviewed by Sam Weinig.

2013-12-01  Andreas Kling  <akling@apple.com>

        Remove unreachable labels for -webkit-margin-*-collapse properties.
        <https://webkit.org/b/125057>

        The following properties are implemented in DeprecatedStyleBuilder
        and should not have case labels in the applyProperty() switch:

            -webkit-margin-before-collapse
            -webkit-margin-top-collapse
            -webkit-margin-after-collapse
            -webkit-margin-bottom-collapse

        This seems counter-intuitive, but they are actually *not* like other
        directional properties. In this case, before/after are only aliases
        for top/bottom, and do not depend on writing-mode or text-direction.
        See also r68561, where the aliases were originally added.

        Reviewed by Anders Carlsson.

2013-12-01  Andreas Kling  <akling@apple.com>

        CSSFunctionValue constructors should return PassRef.
        <https://webkit.org/b/125054>

        Make CSSFunctionValue::create() helpers return PassRef instead of
        PassRefPtr since they will never return null.

        Reviewed by Anders Carlsson.

2013-12-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159764.
        http://trac.webkit.org/changeset/159764
        https://bugs.webkit.org/show_bug.cgi?id=125055

        appears to hurt html5-full-render times (Requested by kling on
        #webkit).

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLConstructionSite.h:

2013-12-01  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return PassRef.
        <https://webkit.org/b/125043>

        Reduce branchiness in computed style code by making more of the
        file-local helpers return PassRef instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-11-30  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Implement scrollbarThickness for opaque scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125034

        Reviewed by Gyuyoung Kim.

        Implemented scrollbarThickness to support opaque scrollbar.
        Now, edj can decide whether to support opaque scrollbar by adding scrollbar.thickness.
        In addition, added OVERRIDE/FINAL keyword and removed unnecessary destructor
        in ScrollbarThemeEfl.cpp.

        No new tests, no behavior changes with default theme.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::loadTheme):
        Update thickness of scrollbar when theme was loaded.
        * platform/efl/ScrollbarThemeEfl.cpp:
        * platform/efl/ScrollbarThemeEfl.h:
        (WebCore::ScrollbarThemeEfl::setScrollbarThickness):
        (WebCore::ScrollbarThemeEfl::scrollbarThickness):
        (WebCore::ScrollbarThemeEfl::registerScrollbar):
        (WebCore::ScrollbarThemeEfl::unregisterScrollbar):

2013-11-29  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove Symbian specific code.
        https://bugs.webkit.org/show_bug.cgi?id=124939

        Reviewed by Zoltan Herczeg.

        Symbian is not supported, remove leftover code.

        * plugins/npapi.h:

2013-11-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Rename InlineIterator::m_obj and make it private
        https://bugs.webkit.org/show_bug.cgi?id=124837

        Reviewed by Antti Koivisto.

        InlineIterator has been exported m_obj as public though there is a getter function.
        Besides *object* name isn't ambigious. So, changed it with m_renderer and renderer().
        Additionally, setRenderer() is added as well.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setObject):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::skipNonBreakingSpace):
        (WebCore::requiresLineBox):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Rename StylePropertySet to StyleProperties
        https://bugs.webkit.org/show_bug.cgi?id=124990
        
        Reviewed by Andreas Kling.

        "Set" does not add useful information here. Use less clunky plural name.

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding EditorNix to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124984

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:
        * editing/nix/EditorNix.cpp: Added.

2013-11-28  Zoltan Horvath  <zoltan@webkit.org>

        [Win] Update vcxproj.filters, since LineInfo.h and LineLayoutState.h have been moved to rendering/line
        https://bugs.webkit.org/show_bug.cgi?id=124959

        Reviewed by Brent Fulgham.

        Update WebCore.vcxproj.filters, since LineInfo.h (r155628) and LineLayoutState.h (158121) have been moved to rendering/line.

        No new tests, no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-28  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        RenderTableSection Blink merge asserting
        https://bugs.webkit.org/show_bug.cgi?id=124857

        Reviewed by Csaba Osztrogonác.

        Use border spacing at the end of all sections.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Remove feature: CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=114119

        Reviewed by Andreas Kling.
        
        The feature is unmaintained and it is getting in the way of refactoring. Code quality is not up to
        WebKit standards either.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::hasDoubleValue):
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (WebCore::determineCategory):
        (WebCore::CSSCalcBinaryOperation::primitiveType):
        * css/CSSCalculationValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStylePropertySet):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::primitiveType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        * css/CSSReflectValue.cpp:
        * css/CSSReflectValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::setCssText):
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h: Removed.
        * css/Pair.h:
        * css/Rect.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::PropertyReference::cssName):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        * css/WebKitCSSTransformValue.cpp:
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::equals):
        * css/makeprop.pl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleVariableData.h: Removed.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Updating RTCPeerConnectionHandlerMock after r159769
        https://bugs.webkit.org/show_bug.cgi?id=124947

        Reviewed by Philippe Normand.

        Adding its create function back, in order to run RTCPeerConnection LayoutTests.

        No new tests needed.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::create):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Support custom types for drag and drop data
        https://bugs.webkit.org/show_bug.cgi?id=124659

        Reviewed by Martin Robinson.

        Covered by fast/events/drag-customData.html.

        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::unknownTypes): returns a hash map with all custom types set.
        (WebCore::DataObjectGtk::clearAllExceptFilenames): clear custom types.
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::hasUnknownTypeData): returns whether custom types are set.
        (WebCore::DataObjectGtk::unknownTypeData): returns the data for a custom type.
        (WebCore::DataObjectGtk::setUnknownTypeData): sets the data for a custom type.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString): handle unknown types as custom.
        (WebCore::Pasteboard::writePasteboard): ditto.
        (WebCore::Pasteboard::hasData): also check for custom types.
        (WebCore::Pasteboard::types): also obtain the list of custom types.
        (WebCore::Pasteboard::readString): handle unknown types as custom.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::initGdkAtoms): new unknown atom.
        (WebCore::PasteboardHelper::PasteboardHelper): add custom type to the list of targets.
        (WebCore::PasteboardHelper::fillSelectionData): turns any custom types' data into a GVariant, which
        is in turn serialized to a single string for GtkSelectionData to hold.
        (WebCore::PasteboardHelper::targetListForDataObject): add custom data to the target list if any is
        set.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): retrieve the custom types and their data
        from the serialized GVariant string held by GtkSelectionData.
        (WebCore::PasteboardHelper::dropAtomsForContext): handle custom types.

2013-11-27  Eric Carlson  <eric.carlson@apple.com>

        Allow the QuickTime plug-in to be replaced by script in an isolated word
        https://bugs.webkit.org/show_bug.cgi?id=124900

        Reviewed by Dean Jackson.

        Test: plugins/quicktime-plugin-replacement.html

        * CMakeLists.txt: Add new Modules path.
        * DerivedSources.make: Add new files.
        * GNUmakefile.am: Add new Modules path.
        * GNUmakefile.list.am: Add new header.
        * WebCore.vcxproj/WebCore.vcxproj: Add new header.
        * WebCore.vcxproj/WebCoreCommon.props: Add new Modules path.
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * Modules/plugins: Added.
        * Modules/plugins/PluginReplacement.h: Added. Defines the interface for a plug-in replacement.

        Create a replacement for the QuickTime plug-in.
        * Modules/plugins/QuickTimePluginReplacement.cpp: Added.
        * Modules/plugins/QuickTimePluginReplacement.css: Added.
        * Modules/plugins/QuickTimePluginReplacement.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.idl: Added.
        * Modules/plugins/QuickTimePluginReplacement.js: Added.

        Allow plug-in replacement to be enabled at runtime.
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPluginReplacementEnabled):
        (WebCore::RuntimeEnabledFeatures::pluginReplacementEnabled):

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Add toJS(... const String& ...).

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject): Give a plug-in replacement a first shot at defining the
            script interface.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): Call base class requestObject.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fileSize): New, passthrough to media engine.
        * html/HTMLMediaElement.h:

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): Call base class requestObject.

        Moved some logic that was previously used only for creating a plug-in snapshot to the base
        class so it can be shared by a plug-in replacement.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize timer used to swap renderers.
        (WebCore::HTMLPlugInElement::createRenderer): Allow plug-in replacement to create the renderer.
        (WebCore::HTMLPlugInElement::swapRendererTimerFired): Create a shadow root.
        (WebCore::HTMLPlugInElement::setDisplayState): Set the new state, prime the swap renderer 
            timer if necessary.
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot): Tell the plug-in replacement to
            install itself in the new shadow DOM.
        (WebCore::registeredPluginReplacements): Return vector of all registered plug-in replacements.
        (WebCore::registerPluginReplacement): Add a plug-in replacement.
        (WebCore::pluginReplacementForType): Find a plug-in replacement for a MIME type.
        (WebCore::HTMLPlugInElement::requestObject): If there is a plug-in replacement for the MIME type,
            create it and set the display state.
        (WebCore::HTMLPlugInElement::scriptObjectForPluginReplacement): Return the script object for 
            the current plug-in replacement, if any.
        * html/HTMLPlugInElement.h:

        Move some plug-in snapshot code into the base class.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): No need to initialize timer.
        (WebCore::HTMLPlugInImageElement::setDisplayState): Call base class.
        (WebCore::HTMLPlugInImageElement::createRenderer): Ditto.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Ditto.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Remove unnecessary class name.
        (WebCore::HTMLPlugInImageElement::requestObject): New.
        * html/HTMLPlugInImageElement.h:

        * html/HTMLVideoElement.h: Make createRenderer public so the QuickTime plug-in replacement can
            call it.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::fileSize): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost): totalBytes returns an unsigned long long.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::fileSize):

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::totalBytes): Return an unsigned long long.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Ditto.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Backup the plug-in replacement runtime setting.
        (WebCore::InternalSettings::Backup::restoreTo): Restore it.
        (WebCore::InternalSettings::setPluginReplacementEnabled): Set it.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-27  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding MediaConstraintsMock class
        https://bugs.webkit.org/show_bug.cgi?id=124902

        Reviewed by Eric Carlson.

        Validate constraints used in RTCPeerConnection LayoutTests

        Existing test was updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * platform/mock/MediaConstraintsMock.cpp: Added.
        * platform/mock/MediaConstraintsMock.h: Added.
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::validateRequestConstraints): Now using MediaConstraintsMock
        (WebCore::MockMediaStreamCenter::createMediaStream): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::initialize): Ditto.

2013-11-27  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Inside Should Default to 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=124851

        Reviewed by Alexandru Chiculita.

        The current shape-inside specification has the property default to the 'auto'
        value, not 'outside-shape'.

        Updated tests are under fast/shapes.

        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2013-11-27  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Andreas Kling.

        Apply LayoutUnit::fromFloatCeil() consistently in RectangleShape::firstIncludedIntervalLogicalTop().

        Test: fast/shapes/shape-inside/shape-inside-subpixel-rectangle-top.html

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2013-11-27  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove Qt-specific .qrc files
        https://bugs.webkit.org/show_bug.cgi?id=124944

        Reviewed by Andreas Kling.

        No new tests needed.

        * WebCore.qrc: Removed.

2013-11-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Invalid command line error when visiting www.chessbase.com
        https://bugs.webkit.org/show_bug.cgi?id=124715

        Reviewed by Philippe Normand.

        We were not handling the HTTP errors in the WebKit GStreamer
        source and therefore the 404 error page was being 'decoded'. As no
        decoder could be found (for obvious reasons), playback failed, but
        it should be failing for the source not being found instead of the
        decoding problem.

        Test: http/tests/media/video-error-does-not-exist.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Handle HTTP errors in
        the source and raise a GStreamer error to the pipeline.

2013-11-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix positioning of grid items with margins
        https://bugs.webkit.org/show_bug.cgi?id=124345

        Reviewed by David Hyatt.

        From Blink r157925 and r158041 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-margin-resolution.html

        Adds margin start/before to the positions of grid items (removing
        several FIXME's in the current code). This means calling
        findChildLogicalPosition() after the layout in order to have the
        right values for the margins.

        In order to match flexbox and author's intents we're also
        including the margins of grid items in the intrinsic size of the
        grid. That's why flexbox's marginLogicalPositionForChild() is
        moved up to RenderBlock in order to share it with RenderGrid.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::marginIntrinsicLogicalWidthForChild): Moved
        from RenderFlexibleBox::marginLogicalWidthForChild().
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredTrackWidth):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):

2013-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support grid-definition-{rows|columns} repeat() syntax
        https://bugs.webkit.org/show_bug.cgi?id=103312

        Reviewed by Andreas Kling.

        Added support for the repeat() syntax inside
        grid-definition-{rows|columns} by just adding the repeated values
        to our list of column|row definitions.

        The parsing of <track-name> was refactored in a new function as
        it's used now in three different places. The <track-size> parsing
        was also refactored to share it with the repeat() parsing.

        Test: fast/css-grid-layout/grid-element-repeat-get-set.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTrackNames):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        * css/CSSParser.h:

2013-11-26  Marcelo Lira  <marcelo.lira@openbossa.org>

        Nix upstreaming - Adding build files and supporting scripts
        https://bugs.webkit.org/show_bug.cgi?id=118367

        Reviewed by Ryosuke Niwa.

        No new tests needed.

        * CMakeLists.txt:
        * PlatformNix.cmake: Added.

2013-11-26  Tim Horton  <timothy_horton@apple.com>

        Don't parent the TileController root layer in two places
        https://bugs.webkit.org/show_bug.cgi?id=124873

        Reviewed by Brent Fulgham.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        The TileController's layer is already parented by callers of
        TileController::create, and in a special way. TileController
        shouldn't parent itself, anyway...

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [MediaStream API] HTMLMediaElement should be able to use MediaStream as source
        https://bugs.webkit.org/show_bug.cgi?id=121943

        Reviewed by Eric Carlson.

        Implement MediaStream direct assignment to Media Elements using the new 'srcObject'
        attribute: http://www.w3.org/TR/mediacapture-streams/#direct-assignment-to-media-elements

        Test: fast/mediastream/MediaStream-MediaElement-srcObject.html

        * CMakeLists.txt: Added new HTMLMediaElementMediaStream.h and .cpp to cmake build.
        * DerivedSources.make: Added HTMLMediaElementMediaStream.idl.
        * GNUmakefile.list.am: Added new HTMLMediaElementMediaStream* to autotools build.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * Modules/mediastream/HTMLMediaElementMediaStream.cpp: Added.
        (WebCore::HTMLMediaElementMediaStream::srcObject): implements srcObject getter.
        (WebCore::HTMLMediaElementMediaStream::setSrcObject): implements srcObject setter.
        * Modules/mediastream/HTMLMediaElementMediaStream.h: Added.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Added.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrcObject): This is an initial implementation, and
        is still incomplete, that will be addressed in a separate bug: https://webkit.org/b/124896
        * html/HTMLMediaElement.h: Added m_mediaStreamSrcObject class variable
        and its corresponding getter.

2013-11-26  Andreas Kling  <akling@apple.com>

        Use child iterator to find operators in RenderMathMLRow::layout().
        <https://webkit.org/b/124108>

        Replace manual children walk with childrenOfType<RenderMathMLBlock>.
        Minor update to fix build.

        Reviewed by Martin Robinson.

2013-11-26  Andreas Kling  <akling@apple.com>

        RenderObject: Inline isBody() and isHR().
        <https://webkit.org/b/124901>

        Together these account for ~0.3% of samples on HTML5-8266.
        Almost all of it is call overhead.

        Reviewed by Anders Carlsson.

2013-11-26  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Layout using [<box> || <shape>] value
        https://bugs.webkit.org/show_bug.cgi?id=124428

        Reviewed by David Hyatt.

        When a box value is supplied, use it to size and position the shape. Otherwise,
        use a default value (content-box for shape-inside, margin-box for shape-outside).
        This patch extends the sizing and positioning code used for the box patch (Bug 124227)
        to also apply to shapes. With this patch, we also no longer use the box-sizing
        property to size and position shapes.

        Tests: fast/shapes/shape-outside-floats/shape-outside-shape-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Adjust for ShapeValues storing
        BasicShape::ReferenceBox as their box value, rather than a CSSValueID.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Ditto.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for BasicShapes with reference boxes
        as well as plain box values. Also, remove old box-sizing code.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Adjust for boxes being stored as
        BasicShape::ReferenceBoxes.
        (WebCore::ShapeValue::box): Ditto.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2013-11-26  Brian J. Burg  <burg@cs.washington.edu>

        ImageBuffer::create should return a std::unique_ptr instead of OwnPtr.
        https://bugs.webkit.org/show_bug.cgi?id=124822

        Reviewed by Andreas Kling.

        Replace all uses of OwnPtr<ImageBuffer> and PassOwnPtr<ImageBuffer> with
        std::unique_ptr<ImageBuffer>. Replace calls to OwnPtr::clear() and
        OwnPtr::release() with reset() and std::move(). Remove unnecessary includes.

        No new tests. This is a mechanical refactoring.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer):
        * html/canvas/WebGLRenderingContext.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setSourceImage):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::clearResult):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::invalidateBufferedForeground):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp: Remove method parameter wrapping/indentation.
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp: Remove method parameter wrapping/indentation.
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourcePattern.h: Remove method parameter wrapping/indentation.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::createImageBufferForPattern):
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::drawPatternForContainer):

2013-11-26  Eric Carlson  <eric.carlson@apple.com>

        video.currentSrc should return empty when no resource is loaded
        https://bugs.webkit.org/show_bug.cgi?id=124898

        Reviewed by Dan Bernstein.

        Test: media/video-currentsrc-cleared.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_currentSrc to empty in 
            preparation for attempting to load a new url.

2013-11-26  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Support for shape-margin in BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124788

        Reviewed by Andreas Kling.

        Corrected BoxShape's internal shape-margin/padding bounds FloatRoundedRect
        initialization. Tests for the padding bounds will be added when the rest of
        shape-padding for box shapes implementation is ready.

        Tests: fast/shapes/shape-outside-floats/shape-outside-margin-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-margin-boxes-002.html

        * rendering/shapes/BoxShape.cpp: Use constructor shape-margin,shape-padding parameters.
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape): Pass the shape-margin and shape-padding values along to the BoxShape constructor.
        (WebCore::Shape::createShape): Ditto.

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary webaudio include from MediaStreamSource header
        https://bugs.webkit.org/show_bug.cgi?id=124897

        Reviewed by Eric Carlson.

        AudioDestinationConsumer.h is included but not used anywhere in
        MediaStreamSource implementation.

        * platform/mediastream/MediaStreamSource.h:

2013-11-26  Andreas Kling  <akling@apple.com>

        Avoid unnecessary copy-on-write in FillLayer style application.
        <https://webkit.org/b/124878>

        We ended up with a lot of cloned StyleBackgroundData objects on
        HTML5-8266. This happened because we always forced a copy-on-write
        when applying background-image:inherit / background-image:initial.

        This patch adds early returns to both functions. In the "inherit"
        case, we bail early if the target style already has the same fill
        layer data as its parent style.

        In the "initial" case, we optimize for the single-FillLayer case
        and add an early return if the relevant value is either unset or
        equal to the templatized initial value.

        2.46 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Allow showing a context menu on all mouse events.
        https://bugs.webkit.org/show_bug.cgi?id=124747

        Reviewed by Joseph Pecoraro.

        Add a new InspectorFrontendHost::dispatchEventAsContextMenuEvent(Event*) method
        to let the inspector front-end dispatch a native contextmenu event that will allow
        for a context menu to be shown from within a non-contextmenu event handler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        Check that we're dealing with a mouse event, get the frame for the event target
        and the event's location to call ContextMenuController::showContextMenuAt()
        which will handle the new contextmenu event dispatch to the original event target.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-11-25  Sam Weinig  <sam@webkit.org>

        Convert some Shape code to use references
        https://bugs.webkit.org/show_bug.cgi?id=124876

        Reviewed by Andreas Kling.

        * inspector/InspectorOverlay.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/LayoutState.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/LineWidth.cpp:
        * rendering/shapes/ShapeInfo.cpp:
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        * rendering/shapes/ShapeOutsideInfo.h:
        Replace yet more pointers with references.

2013-11-25  Simon Pena  <simon.pena@samsung.com>

        [EFL] X11Helper::createPixmap doesn't initialise out value handleId
        https://bugs.webkit.org/show_bug.cgi?id=124722

        Reviewed by Gyuyoung Kim.

        The overloaded functions X11Helper::createPixmap don't initialise out
        value handleId, and they do early returns on error situations. Since
        the functions are void and they don't communicate their failure in any
        way, returning an out value without initialising it could make the
        error go farther unnoticed. With the variable being initialised, it can
        be reliably checked for errors when the function returns.

        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createPixmap): Initialise handleId to 0.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Mark URLRegistry's lookup() as const and its child classes as final
        https://bugs.webkit.org/show_bug.cgi?id=124865

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changes.

        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::lookup): marked as const.
        * Modules/mediasource/MediaSourceRegistry.h: MediaSourceRegistry
        marked as final.
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::lookup): marked as const.
        * Modules/mediastream/MediaStreamRegistry.h: MediaStreamRegistry
        marked as final.
        * fileapi/Blob.cpp:
        * html/URLRegistry.h: lookup() marked as const.
        (WebCore::URLRegistry::lookup): marked as const.

2013-11-25  Sergio Correia  <sergio.correia@openbossa.org>

        [MediaStream] Use std::unique_ptr instead of OwnPtr/PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=124858

        Reviewed by Eric Carlson.

        Another step of the OwnPtr/PassOwnPtr => std::unique_ptr conversion,
        now targeting mediastream-related code.

        No new tests, covered by existing ones.

        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        MediaStreamRegistry should store MediaStreams instead of MediaStreamPrivates
        https://bugs.webkit.org/show_bug.cgi?id=124860

        Reviewed by Eric Carlson.

        MediaStreamRegistry::lookup() should return a MediaStream instead of MediaStreamPrivate.

        No new tests needed. No behavior changes.

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL): m_privateStreams -> m_mediaStreams
        (WebCore::MediaStreamRegistry::unregisterURL): Ditto.
        (WebCore::MediaStreamRegistry::lookup): Override URLRegistry::lookup() instead of add a
        new method MediaStream::lookupMediaStreamPrivate().
        * Modules/mediastream/MediaStreamRegistry.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource): call lookup() instead of lookupMediaStreamPrivate()

2013-11-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fails when GSTREAMER is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124853

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp: Don't include GStreamerUtilities.h when GSTREAMER is not used.

2013-11-25  Andreas Kling  <akling@apple.com>

        Deduplicate shortish Text node strings during tree construction.
        <https://webkit.org/b/124855>

        Let HTMLConstructionSite keep a hash set of already seen strings over
        its lifetime. Use this to deduplicate the strings inside Text nodes
        for any string up to 64 characters of length.

        This optimization already sort-of existed for whitespace-only Texts,
        but those are laundered in the AtomicString table which we definitely
        don't want to pollute with every single Text. It might be a good idea
        to stop using the AtomicString table for all-whitespace Text too.

        3.82 MB progression on HTML5-8266 locally.

        Reviewed by Anders Carlsson.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary MediaStreamTrackDescriptor forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=124854

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changed.

        * Modules/mediastream/VideoStreamTrack.h:

2013-11-25  Robert Hogan  <robert@webkit.org>

        Remove code now unnecessary after r159575
        https://bugs.webkit.org/show_bug.cgi?id=124809

        Reviewed by Antti Koivisto.

        Covered by existing tests fast/block/margin-collapse/self-collapsing-block-with-float*

        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2013-11-25  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Vertical border spacing is doubled between table row groups
        https://bugs.webkit.org/show_bug.cgi?id=20040

        Reviewed by Csaba Osztrogonác.

        Based on Chromium fix https://chromium.googlesource.com/chromium/blink/+/eb615069267f895c59bc576f9d65b3fa5add41e9

        Rebaseline needed for table related tests (100+).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-25  Andres Gomez  <agomez@igalia.com>

        [GStreamer] Seeking fails on media content provided by servers not supporting Range requests
        https://bugs.webkit.org/show_bug.cgi?id=85994

        Reviewed by Philippe Normand.

        Based on the patch written by Andre Moreira Magalhaes.

        When the GStreamer web source was doing a "Range" request we were
        expecting to receive a 206 status reply with the "Content-Range"
        header and just the requested data. Supporting "Range" requests is
        not mandatory so, for the servers not supporting it they will be
        replying with a 200 status and the whole content of the media
        element. Now, we are properly handling these replies too.

        Test: http/tests/media/media-seeking-no-ranges-server.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Do not fail when
        receiving 200 as response for HTTP range requests.
        (StreamingClient::handleDataReceived): Manually seek on stream
        when receiving the full data after a seek.

2013-11-25  Radu Stavila  <stavila@adobe.com>

        Removed obsolete FIXME after the landing of visual overflow patch (https://bugs.webkit.org/show_bug.cgi?id=118665).
        https://bugs.webkit.org/show_bug.cgi?id=124833

        Reviewed by Mihnea Ovidenie.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layoutBlock):

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Cache several vectors to avoid malloc/free churn
        https://bugs.webkit.org/show_bug.cgi?id=123995

        Reviewed by Dean Jackson.

        From Blink r158228 by <jchaffraix@chromium.org>

        Laying-out the grid items means a lot of calls to
        distributeSpaceToTracks() and
        resolveContentBasedTrackSizingFunctionsForItems() as they're
        called in a loop. This means that there is a lot of malloc/free
        going on there. By moving the vectors used by these methods to a
        new class which is kept during the whole layout process we save a
        lot of those calls.

        This obviously mean that the price we pay for a significant
        perfomance improvement is that we keep the maximum allocation till
        the end of each layout, but it's an amount of memory that we have
        to allocate anyway. The improvement in the
        auto-grid-lots-of-data.html perf test is ~24% (165 runs/s vs 207
        runs/s).

        No new tests required as we're just refactoring code to a new
        helper class. Nevertheless the performance improvement is backed
        by the perf test mentioned above.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2013-11-24  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Add "UniqueIDBDatabase" that multiple WebProcesses can connect to
        https://bugs.webkit.org/show_bug.cgi?id=124819

        Reviewed by Dan Bernstein.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::~IDBDatabaseBackend): Unregister from the IDBFactory.

2013-11-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLMarquee|OListElement() to cleanup static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124707

        Reviewed by Darin Adler.

        As a step to use toFoo(), we need to generate toHTMLMarquee|OListElement().
        Besides this patch cleans up remaining static_cast<> usage.

        No new tests, no behavior changes.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLTagNames.in:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):

2013-11-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r156291): TileController tiles don't always repaint when they resize
        https://bugs.webkit.org/show_bug.cgi?id=124796

        Reviewed by Simon Fraser.

        In removing platformCALayerDidCreateTiles, r156291 also removed
        the call to setNeedsDisplay when tiles are resized, without
        putting it somewhere else.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setNeedsDisplay):
        Use hasStaleContent when invalidating a whole tile, just
        like we do for partial tile repaints.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Mark hasStaleContent for any unparented layers, so they'll be painted
        when they are reparented.

        (WebCore::TileController::ensureTilesForRect):
        Invalidate the whole tile when it changes size.

2013-11-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove 0.10 codepath
        https://bugs.webkit.org/show_bug.cgi?id=124534

        Reviewed by Philippe Normand.

        All GStreamer ports are using 1.0 now so we remove the 0.10
        codepath.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters: Removed
        GStreamerVersioning.
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (onGStreamerWavparsePadAddedCallback): Removed.
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus.
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::copyGstreamerBuffersToAudioChannel):
        (WebCore::onAppsinkPullRequiredCallback): Removed 0.10 codepath.
        (WebCore::AudioFileReader::~AudioFileReader): Replaced
        webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioFileReader::handleSample): Left as only codepath.
        (WebCore::AudioFileReader::handleBuffer): Removed.
        (WebCore::AudioFileReader::handleNewDeinterleavePad): Removed 0.10
        codepath.
        (WebCore::AudioFileReader::plugDeinterleave): Replaced
        getGstAudioCaps.
        (WebCore::AudioFileReader::decodeAudioForBusCreation): Replaced
        webkitGstPipelineGetBus.
        (WebCore::AudioFileReader::createBus): Removed 0.10 codepath.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (getGStreamerMonoAudioCaps):
        (webKitWebAudioGStreamerChannelPosition): Removed 0.10 codepath.
        (webkit_web_audio_src_class_init): Replaced
        setGstElementClassMetadata.
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcFinalize):
        (webKitWebAudioSrcLoop): Removed 0.10 codepath.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::GstElement):
        (WTF::GstPad):
        (WTF::GstPadTemplate):
        (WTF::GstTask):
        (WTF::GstBus):
        (WTF::GstElementFactory):
        (WTF::adoptGRef): Replaced gstObjectIsFloating.
        (WTF::refGRef): Replaced webkitGstObjectRefSink.
        (WTF::GstTagList):
        (WTF::GstSample): Removed checks for 1.0 as it is the only
        codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Removed checks
        for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::webkitGstGhostPadFromStaticTemplate):
        (WebCore::getVideoSizeAndFormatFromCaps):
        (WebCore::createGstBuffer):
        (WebCore::createGstBufferForData):
        (WebCore::getGstBufferDataPointer):
        (WebCore::mapGstBuffer):
        (WebCore::unmapGstBuffer): Moved here from GstVersioning and added
        to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        (WebCore::webkitGstCheckVersion): Moved here from GstVersioning
        and added to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerVersioning.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerVersioning.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamer.h: Removed checks for
        1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer): Removed 0.10 codepath.
        (ImageGStreamer::~ImageGStreamer): Removed checks for 1.0 as it is
        the only codepath now.
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::setAudioStreamPropertiesCallback): Removed 0.10 codepath.
        (WebCore::mediaPlayerPrivateTextChangedCallback): Removed checks
        for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable): Replaced
        gPlaybinName.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Removed checks for 1.0 and replaced webkitGstPipelineGetBus.
        (WebCore::MediaPlayerPrivateGStreamer::duration): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Replaced
        gPercentMax.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Removed
        0.10 codepath.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Replaced
        gPlaybinName and webkitGstPipelineGetBus and removed checks for
        1.0.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Removed 0.10
        codepath.
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        * platform/graphics/gstreamer/TextCombinerGStreamer.h:
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        * platform/graphics/gstreamer/TextSinkGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Removed
        checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): Removed 0.10 codepath and added WebCore
        as createGstBuffer namespace.
        (webkitVideoSinkSetCaps): Removed 0.10 codepath.
        (webkitVideoSinkProposeAllocation): Removed checks for 1.0 as it
        is the only codepath now.
        (webkitVideoSinkMarshalVoidAndMiniObject): Removed as it was 0.10.
        (webkit_video_sink_class_init): Removed 0.10 codepath and replaced
        setGstElementClassMetadata.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_class_init): Replaced
        setGstElementClassMetadata.
        (webKitMediaSrcAddSrc): Added WebCore namespace to
        webkitGstGhostPadFromStaticTemplate.
        (MediaSourceClientGstreamer::didReceiveData): Added WebCore
        namespace to createGstBufferForData.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        Removed 0.10 codepath.
        (webKitWebSrcQuery): Removed as it was 0.10 only.
        (void webkit_web_src_class_init): Replaced setGstElementClassMetadata.
        (webkit_web_src_init): Removed haveAppSrc27 private attribute and
        0.10 codepath.
        (webKitWebSrcStop): Removed checks for 1.0 as it is the only
        codepath now.
        (webKitWebSrcSetProperty):
        (webKitWebSrcUriGetType):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri): Removed 0.10 codepath.
        (StreamingClient::createReadBuffer): Removed checks for 1.0 and
        replaced getGstBufferSize.
        (StreamingClient::handleResponseReceived): Removed 0.10 codepath
        and replaced notifyGstTagsOnPad.
        (StreamingClient::handleDataReceived): Removed 0.10 codepath and
        replaced setGstBufferSize and gst_buffer_get_size.

2013-11-22  Jer Noble  <jer.noble@apple.com>

        [Mac] Can't drag full-screen video to another monitor
        https://bugs.webkit.org/show_bug.cgi?id=124798

        Reviewed by Geoffrey Garen.

        Make full screen windows movable by default. Previously, we wanted non-movable full screen
        windows since they were in the same space and were just placed atop non-full screen windows.
        Now that all our supported Mac platforms have explicit full screen support, we can remove this
        non-movable restriction.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow initWithContentRect:styleMask:backing:defer:]):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up ColorSpace handling in Windows code
        https://bugs.webkit.org/show_bug.cgi?id=124795

        Reviewed by Tim Horton.

        Functionality covered by existing fast/css/color test suite.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::safeRGBColorSpaceRef): Handle case of Windows CG implementation not
        handling sRGB correctly.
        (WebCore::sRGBColorSpaceRef): Use new helper function.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Pass correct color space to fill functions.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::platformInit): Initialize color space to value passed
        via the style to the constructor.

2013-11-22  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto algorithms should check that key algorithm matches
        https://bugs.webkit.org/show_bug.cgi?id=123628

        Reviewed by Anders Carlsson.

        No change in behavior yet, because we have one algorithm per key class.
        Will be tested once more algorithms are added.

        * WebCore.xcodeproj/project.pbxproj: Updated for file renames.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaKeyParamsWithHash):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::createRSAKeyParametersWithHash):
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h: Copied from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        Renamed RsaSsaKeyParams to RsaKeyParamsWithHash, because other algorithms (like RSA-OAEP)
        are in the same boat. Depending on where the spec goes, we might need to introduce
        algorithm specific RSA parameter classes later, but let's reduce copy/pasted code at
        least for now.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Moved to the correct directory.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Copied from Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign): Factored out Mac specific
        code, leaving type casting to cross-platform files.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Ditto.

        * crypto/CryptoAlgorithmRegistry.h:
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Reduce copy/pasting in registration code.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches): Check key type and algorithm.
        (WebCore::CryptoAlgorithmAES_CBC::encrypt): Cross platform type casting code.
        Maybe we'll find a way to autogenerate or eliminate it one day.
        (WebCore::CryptoAlgorithmAES_CBC::decrypt): Ditto.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        Same changes for all algorithms that have keys.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Fire "change" event on TextTrackList when a TextTrack's mode changes
        https://bugs.webkit.org/show_bug.cgi?id=124789

        Reviewed by Eric Carlson.

        Since AudioTrackList and VideoTrackList already have this event, the
        interesting bits are in TrackListBase::scheduleChangeEvent(), and we
        just need to call it for TextTrackList changes.

        Test: media/track/track-change-event.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::textTrackModeChanged): Call TrackListBase::scheduleChangeEvent().
        * html/track/TextTrackList.idl: Add onchange event listener.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Add TextTrackList::getTrackById().
        https://bugs.webkit.org/show_bug.cgi?id=124785

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/track/TextTrackList.cpp: Add getTrackById()
        (TextTrackList::getTrackById):
        * html/track/TextTrackList.h: Same.
        * html/track/TextTrackList.idl: Same.

2013-11-22  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] When the <box> value is set, derive radii from border-radius
        https://bugs.webkit.org/show_bug.cgi?id=124228

        Reviewed by Dean Jackson.

        Add support for BoxShape elliptical corners.

        Tests: fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-002.html

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::bottomLeftCorner): Corrected a copy-and-pasteO.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals): Returned interval now depends on the top and bottom of the line.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Rounded rect parameters are now specified with a RoundedRect parameter.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Pass style's rounded border to createShape().

2013-11-22  Andres Gomez  <agomez@igalia.com>

        Several missing/incorrect guards for LOG_DISABLED=0 against Release build (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=78735

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * page/CaptionUserPreferencesMediaAF.cpp: Explicitly adding
        missing include.

2013-11-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Fix of SSL certificate chain storage
        https://bugs.webkit.org/show_bug.cgi?id=124768

        Reviewed by Brent Fulgham.

        Change the certificates storage type into ListHashSet
        from HashSet to keep the chain order in each case.
        This ensures that there is no difference between the stored
        and the recieved certificate chain.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Avoid deadlock when interacting with some AVFoundationCF content
        <rdar://problem/15482977> and https://bugs.webkit.org/show_bug.cgi?id=124752

        Prevent deadlock caused by conflict over the "mapLock" mutex. Notification handling in the file,
        which modify assets and make other changes, are required to happen on the main thread. This
        patch enforces this requirement.

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::NotificationCallbackData::NotificationCallbackData): Added
        (WebCore::AVFWrapper::processNotification): Moved logic from 'notificationCallback', which was
        sometimes happening on a background thread.
        (WebCore::AVFWrapper::notificationCallback): Dispatch calls to main thread.

2013-11-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error when ACCELERATED_COMPOSITING is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124773

        Reviewed by Brent Fulgham.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations): Added USE(ACCELERATED_COMPOSITING) guard.

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Improve content-sized track layout
        https://bugs.webkit.org/show_bug.cgi?id=124408

        Reviewed by Dean Jackson.

        Test: fast/css-grid-layout/grid-item-with-percent-min-max-height-dynamic.html

        From Blink r156122 & r157633 by <jchaffraix@chromium.org>

        Added a couple of optimizations to speed up the layout of content
        based tracks. The idea is to narrow down the conditions for
        relayouting when the height of a grid area changes. We basically
        just need to layout tracks with percentage heights as they're the
        only ones that change.

        A new performance test is attached to demonstrate the effect of
        these optimizations. We get a ~1000% improvement on a i7 M620
        going from 14.5 runs/s to 165 runs/s.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::layoutGridItems):

2013-11-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Run the content-sized tracks sizing algorithm only when required
        https://bugs.webkit.org/show_bug.cgi?id=124039

        Reviewed by Dean Jackson.

        The current code runs the content sized track sizing algorithm all
        the time, which forces a layout even when the track is not
        content-sized. This change improves the situation by applying two
        optimizations. In the first one, we bail out the algorithm if we
        detect that we don't need to run it. And by the second one we
        reduce the amount of recomputations by only iterating over the
        content sized tracks instead of all of them. Both changes follow
        the ideas introduced in Blink r156028 and r156168 by
        <jchaffraix@chromium.org>.

        As we changed the way we iterate over children (we use the
        GridIterator now) the way they're stored in the RenderGrid changes
        too. If a item spans through several "cells" inside the grid, we
        will have a reference to it on each of them.

        These two changes account for a ~3200% improvement on a i7 M620 in
        the test that accompanies this change (15.5 vs 520 run/s).

        New perf test: PerformanceTests/Layout/fixed-grid-lots-of-data.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Keep track
        of content sized tracks and only iterate over them.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Early return if there are no tracks to pass to the algorithm.
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isContentSized):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::isContentSized):

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Move code after early break in RenderRegion::repaintFlowThreadContentRectangle
        https://bugs.webkit.org/show_bug.cgi?id=124743

        Reviewed by Mihnea Ovidenie.

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle): Variable
        flippedFlowThreadPortionRect is not used before the early break, so we
        can move it after and save some unneeded operations.

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Use hasOverflowClip() in RenderRegion
        https://bugs.webkit.org/show_bug.cgi?id=124746

        Reviewed by Mihnea Ovidenie.

        Implement the suggested FIXME in RenderRegion using hasOverflowClip().

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion): Use
        hasOverflowClip().
        (WebCore::RenderRegion::rectFlowPortionForBox): Ditto.

2013-11-21  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Test: mathml/presentation/mstyle-css-attributes.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): reorder attributes
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): reorder tags that accept dir
        (WebCore::MathMLElement::isMathMLToken): add an inline function to test that a tag corresponds to a MathML Token Element.
        * mathml/MathMLElement.h:

        Follow-up work to address Darin's comments.

2013-11-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove ENABLE_WORKERS
        https://bugs.webkit.org/show_bug.cgi?id=105784

        Reviewed by Darin Adler.

2013-11-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r159632.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::certVerifyCallback):
        Fixed template syntax.

2013-11-21  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Refactor highlighting code to decrease Shapes API surface
        https://bugs.webkit.org/show_bug.cgi?id=124737

        Reviewed by Timothy Hatcher.

        Add a virtual method to Shapes, buildPath, that can be used to build the
        path (in the Shape coordinate system) for display in the Inspector. This allows us
        to remove methods such as type(), polygon(), and logicalRx/Ry() which exposed the
        inner workings of the Shapes classes. Also covers the addition of the BoxShape type.

        Refactoring, existing test is inspector-protocol/model/highlight-shape-outside.html.

        * inspector/InspectorOverlay.cpp:
        (WebCore::appendPathCommandAndPoints): Points need to be translated from shape space
        to renderer space using ShapeInfo.
        (WebCore::buildObjectForShapeOutside): Add the ShapeOutsideInfo to the path info struct.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::buildPath): Build the path for a BoxShape.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::buildPath): Build the path for a PolygonShape.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildPath): Build the path for a RectangleShape.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Gwang Yoon Hwang  <ryumiel@company100.net>

        [GTK] Unreviewed buildfix after r159614 and r159656.

        * bindings/gobject/WebKitDOMCustom.cpp: Add missing header

2013-11-21  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Fix WinCairo unreachable code warnings in SimpleLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=124704

        Reviewed by Antti Koivisto.

        Fix unreachable code warnings using conditional directives.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124701> Fix an error in a few Xcode configuration setting files.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124700> Fix some deprecation warnings.

        Reviewed by Anders Carlsson.

        * platform/mac/HTMLConverter.mm:
        (fileWrapperForURL): Move off a deprecated NSFileWrapper method.

2013-11-21  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix; export symbol for WebCore::provideDeviceOrientationTo()

        Add the symbol __ZN7WebCore26provideDeviceOrientationToEPNS_4PageEPNS_23DeviceOrientationClientE.

        * WebCore.exp.in:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard
        https://bugs.webkit.org/show_bug.cgi?id=124741

        Reviewed by Alexey Proskuryakov.

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard around code that is unused
        when building with feature NETWORK_CFDATA_ARRAY_CALLBACK.

        Additionally, add a declaration for allocateSegment() with attribute WARN_UNUSED_RETURN
        to have the compiler warn when the return value of this function is unused. Together with
        warnings treated as errors this change will prevent a memory leak.

        * platform/SharedBuffer.cpp:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Remove unused functions from WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=124739

        Reviewed by Alexey Proskuryakov.

        * editing/markup.cpp: Remove unused functions isHTMLBlockElement and
        ancestorToRetainStructureAndAppearanceWithNoRenderer.
        * rendering/InlineElementBox.cpp: Append newline to the end of the file.

2013-11-21  Daniel Bates  <dabates@apple.com>

        Only generate isObservable() when IDL specifies GenerateIsReachable
        https://bugs.webkit.org/show_bug.cgi?id=124729

        Reviewed by Geoffrey Garen.

        We should only generate the static inline function isObservable() when the IDL
        specifies GenerateIsReachable. Otherwise, this function is unused.

        Added a new test IDL TestGenerateIsReachable.idl and expected results to test that
        we generate isObservable() when an IDL specifies GenerateIsReachable. Additionally,
        rebased existing test results.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachablePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestException.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * bindings/scripts/test/JS/JSattribute.cpp: Ditto.
        * bindings/scripts/test/JS/JSreadonly.cpp: Ditto.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h: Added.
        * bindings/scripts/test/TestGenerateIsReachable.idl: Added.

2013-11-21  Beth Dakin  <bdakin@apple.com>

        Add a new mode to extend the tile cache beyond the page
        https://bugs.webkit.org/show_bug.cgi?id=124216

        Reviewed by Simon Fraser.

        This patch makes it possible to give the tile cache a margin of tiles. If there is 
        a margin of tiles, this patch paints those tiles with the background color. Note 
        that this patch does not actually give the tile cache a margin at this time.

        You opt into a margined tiled cache by called setTileMargins() with number of 
        pixels that the margin on that side should be. 
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):

        TileController::bounds() now computes the bounds INCLUDING the margin.
        (WebCore::TileController::bounds):

        adjustRectAtTileIndexForMargin() is a new function that is required to get the 
        rect size for tiles in the margin right. rectForTileIndex() assumes all tiles 
        strive to be the size of m_tileSize, but now margin tiles will be whatever the 
        margin sizes were set to.
        (WebCore::TileController::adjustRectAtTileIndexForMargin):
        (WebCore::TileController::rectForTileIndex):

        This is another instance where m_tileSize is not always the right size to use.
        (WebCore::TileController::getTileIndexRangeForRect):

        The tile coverage rect now might include the margin tiles. Only include them in 
        slow-scrolling mode if the current position is within one tile of the edge.
        (WebCore::TileController::computeTileCoverageRect):

        tileSizeForCoverageRect() does not make sense in a world where the coverage rect 
        will include margin. Instead, this patch implements the current strategy more 
        explicitly by returning the visibleRect in the slow scrolling case, and in the 
        process this patch also re-names tileSizeForCoverageRect() to computeTileSize() 
        since it no longer takes a coverageRect.
        (WebCore::TileController::computeTileSize):
        (WebCore::TileController::revalidateTiles):

        New setters and getters for the tile margins on each side.
        (WebCore::TileController::setTileMargins):
        (WebCore::TileController::hasMargins):
        (WebCore::TileController::topMarginHeight):
        (WebCore::TileController::bottomMarginHeight):
        (WebCore::TileController::leftMarginWidth):
        (WebCore::TileController::rightMarginWidth):

        New function to add margin onto the composited bounds if there is one.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::tiledBackingHasMargin):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBoundsIncludingMargin):
        * rendering/RenderLayerBacking.h:

        Do not set masks to bounds if there is a margin on the root layer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::mainFrameBackingIsTiledWithMargin):
        * rendering/RenderLayerCompositor.h:

        Allow background color to paint into the margin tiles.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124738

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-wrap-rsa-non-extractable.html
               crypto/subtle/aes-cbc-wrap-rsa.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::exportKey): Factored out the actual operation that can be chained with
        encryption for wrapKey.
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey): Fixed a memory leak in failure code path.

        * crypto/SubtleCrypto.idl: Added wrapKey.

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto unwrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124725

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-unwrap-failure.html
               crypto/subtle/aes-cbc-unwrap-rsa.html

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.h:
        Removed calls for wrap/unwrap parameter parsing, these are just the same as encrypt/decrypt.

        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h:
        * crypto/CryptoKeySerialization.h:
        More Vector<char> elimination.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        Removed unneccessary copy constructor and assignment operator, they are no diffdrent
        than compiler generated ones.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyUsagesFromJSValue): Minor style fixes.
        (WebCore::JSSubtleCrypto::encrypt): Ditto.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Ditto.
        (WebCore::JSSubtleCrypto::verify): Ditto.
        (WebCore::JSSubtleCrypto::generateKey): Ditto.
        (WebCore::importKey): Separated actual import operation and the parts that read
        arguments from ExecState, and call the promise. Logically, this should be outside
        of bindings code even, but JWK makes that quite challenging.
        (WebCore::JSSubtleCrypto::importKey): This only does the more mundane arguments
        and return parts now.
        (WebCore::JSSubtleCrypto::exportKey): Minor style fixes.
        (WebCore::JSSubtleCrypto::unwrapKey): Chain decrypt and import.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encryptForWrapKey):
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey):
        * crypto/CryptoAlgorithm.h:
        There are algorithms that expose wrap/unwrap, but not encrypt/decrypt. These will
        override these new functions, and leave encrypt/decrypt to raise NOT_SUPPORTED_ERR.

        * crypto/SubtleCrypto.idl: Added unwrapKey.

2013-11-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl]Improve ssl certificate storage and check
        https://bugs.webkit.org/show_bug.cgi?id=124569

        Reviewed by Brent Fulgham.

        Storage and check the whole certificate chain, not just the root certificate.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-21  Mihai Maerean  <mmaerean@adobe.com>

        Fix hover area for divs with css transforms
        https://bugs.webkit.org/show_bug.cgi?id=124647

        Reviewed by Allan Sandfeld Jensen.

        Non transformed layers are now being hit last, not through or in-between transformed layers.
        The paint order says that the divs creating stacking contexts (including transforms) are painted after the
        other siblings so they should be hit tested in the reverse order. Also, a rotated div in a non-rotated parent
        should be hit in its entire area, not hit its parent's background, even if the z-coordinate is negative where
        the mouse is located.

        Test: transforms/3d/hit-testing/hover-rotated-negative-z.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeZOffset):

2013-11-21  Andres Gomez  <agomez@igalia.com>

        [GTK] Release compilation fails when defining "LOG_DISABLED=0"
        https://bugs.webkit.org/show_bug.cgi?id=124661

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * html/HTMLTrackElement.cpp: Explicitly adding missing include.

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix Range.insertNode when the inserted node is in the same container as the Range
        https://bugs.webkit.org/show_bug.cgi?id=123957

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/fb6ca1f488703e8d4f20ce6449cc8ea210be6edb

        When a node from the same container is inserted, we can't simply adjust m_end with the offset.
        Compute m_start and m_end from the inserted nodes instead.

        Also, don't adjust m_start and m_end to nodes outside of the document if the inserted nodes had been
        removed by mutation events.

        Test: fast/dom/Range/range-insertNode-same-container.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        nextBoundary and previousBoundary are very slow when there is a password field
        https://bugs.webkit.org/show_bug.cgi?id=123973

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/57366eec5e3edea54062d4e74c0e047f8681dbad

        When iterating through DOM nodes nextBoundary and previousBoundary convert the contents of nodes using
        text security to a sequence of 'x' characters. The SimplifiedBackwardsTextIterator and TextIterator
        may iterate past node boundaries. Before this patch, the transformation was done looking at the starting
        node rather than the current node. In some situations, this replaced all boundaries with 'x' and caused
        the text iterator to continue iterating and transforming until the extent of the document.

        Test: editing/deleting/password-delete-performance.html

        * editing/TextIterator.h:
        (WebCore::SimplifiedBackwardsTextIterator::node):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        HTML parser should not associate elements inside templates with forms
        https://bugs.webkit.org/show_bug.cgi?id=117779

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/45aadf7ee7ee010327eb692066cf013315ef3ed7

        When parsing <form><template><input>, the previous behavior was to associate the <input> with the <form>,
        even though they're not in the same tree (or even the same document).

        This patch changes that by checking, prior to creating a form control element, whether the element to be
        created lives in a document with a browsing context.

        We don't update m_form as needed to faithfully match the HTML5 specification's form element pointer
        http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#form-element-pointer
        and its algorithm for creating and inserting nodes:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#creating-and-inserting-nodes

        While this leaves isindex's reference to form element pointer stale:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#isindex
        The HTML5 specification matches the behaviors of Chrome and Firefox so we leave it as is.

        Test: fast/dom/HTMLTemplateElement/no-form-association.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElement):

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cannot scroll in option menu when it larger than the screen
        https://bugs.webkit.org/show_bug.cgi?id=124671

        Reviewed by Martin Robinson.

        The problem is that the popup menu is not resized to fit in the
        screen, so it doesn't scroll and some of the items are offscreen
        so they can't be selected either. GTK+ automatically resizes the
        popup menus to fit in the work area, but only when the menu is
        already positioned.

        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp): Schedule a resize of the popup
        menu right after showing it once it has a position.

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark all deprecated symbols in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124406

        Reviewed by Gustavo Noronha Silva.

        Move deprecated API from WebKitDOMCustom to a new file
        WebKitDOMDeprecated leaving in WebKitDOMCustom only the
        non-deprecated API that is not autogenerated. Also added the
        deprecation decorations and tags in the documentation.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitDOMCustom.cpp:
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:
        * bindings/gobject/WebKitDOMDeprecated.cpp: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.cpp.
        (webkit_dom_blob_webkit_slice):
        (webkit_dom_html_element_get_id):
        (webkit_dom_html_element_set_id):
        (webkit_dom_html_element_get_class_name):
        (webkit_dom_html_element_set_class_name):
        (webkit_dom_html_element_get_class_list):
        (webkit_dom_html_form_element_dispatch_form_change):
        (webkit_dom_html_form_element_dispatch_form_input):
        (webkit_dom_webkit_named_flow_get_overflow):
        (webkit_dom_element_get_webkit_region_overflow):
        (webkit_dom_webkit_named_flow_get_content_nodes):
        (webkit_dom_webkit_named_flow_get_regions_by_content_node):
        (webkit_dom_bar_info_get_property):
        (webkit_dom_bar_info_class_init):
        (webkit_dom_bar_info_init):
        (webkit_dom_bar_info_get_visible):
        (webkit_dom_console_get_memory):
        (webkit_dom_css_style_declaration_get_property_css_value):
        (webkit_dom_document_get_webkit_hidden):
        (webkit_dom_document_get_webkit_visibility_state):
        (webkit_dom_html_document_open):
        (webkit_dom_html_element_set_item_id):
        (webkit_dom_html_element_get_item_id):
        (webkit_dom_html_element_get_item_ref):
        (webkit_dom_html_element_get_item_prop):
        (webkit_dom_html_element_set_item_scope):
        (webkit_dom_html_element_get_item_scope):
        (webkit_dom_html_element_get_item_type):
        (webkit_dom_html_style_element_set_scoped):
        (webkit_dom_html_style_element_get_scoped):
        (webkit_dom_html_properties_collection_get_property):
        (webkit_dom_html_properties_collection_class_init):
        (webkit_dom_html_properties_collection_init):
        (webkit_dom_html_properties_collection_item):
        (webkit_dom_html_properties_collection_named_item):
        (webkit_dom_html_properties_collection_get_length):
        (webkit_dom_html_properties_collection_get_names):
        (webkit_dom_node_get_attributes):
        (webkit_dom_node_has_attributes):
        (webkit_dom_memory_info_get_property):
        (webkit_dom_memory_info_class_init):
        (webkit_dom_memory_info_init):
        (webkit_dom_memory_info_get_total_js_heap_size):
        (webkit_dom_memory_info_get_used_js_heap_size):
        (webkit_dom_memory_info_get_js_heap_size_limit):
        (webkit_dom_micro_data_item_value_class_init):
        (webkit_dom_micro_data_item_value_init):
        (webkit_dom_performance_get_memory):
        (webkit_dom_property_node_list_get_property):
        (webkit_dom_property_node_list_class_init):
        (webkit_dom_property_node_list_init):
        (webkit_dom_property_node_list_item):
        (webkit_dom_property_node_list_get_length):
        (webkit_dom_html_media_element_get_start_time):
        (webkit_dom_html_media_element_get_initial_time):
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMDeprecated.h: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.h.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Do not include deprecation guards in the cpp file.
        * bindings/scripts/gobject-generate-headers.pl: Do not create
        fordward declarations for non-existent classes like Custom and
        Deprecated.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):

2013-11-20  Jae Hyun Park  <jae.park@company100.net>

        [CoordinatedGraphics] Use std::unique_ptrs rather than OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=124692

        Reviewed by Noam Rosenthal.

        No new tests, covered by existing ones.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreBackend.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Add more infrastructure for ServerConnection communication between Web and Database processes
        https://bugs.webkit.org/show_bug.cgi?id=124693

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Hoist <template> to head when found between </head> and <body> for consistency with <script>
        https://bugs.webkit.org/show_bug.cgi?id=123949

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/835fb468fd211054a920fb7612a6dc5043662495

        Move template elements between head and body elements into the head to be consistent with script elements.
        The HTML5 specification was changed in http://html5.org/tools/web-apps-tracker?from=8217&to=8218.

        Inline comments below are cited from https://www.w3.org/Bugs/Public/show_bug.cgi?id=23002
        and https://codereview.chromium.org/25900003 for clarity.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag): Add the template element to the list of elements to be hoisted into
        the head element.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):

        Replace the assertion that isParsingFragment is true when item->node() == m_tree.openElements()->rootNode() since,
        with this change, we can now invoke resetInsertionMode when parsing a normal document (not fragment) and there is
        only the html element on the stack of open elements.

        For the second change, consider: <head></head><template>

        This example breaks in the old HTML parser because the template element is handled by "after head" state which
        pushes the head element back on, processes the template element for "in head", then pops the head element off.
        EOF is reached, which processes a fake close tag for the template element, which pops the template element off
        and resets the insertion mode appropriately

        The problem here is that "reset the insertion mode" is going to inspect the bottom-most element on the stack which
        is now the html element and it will set the mode to "before head". Nothing good happens after this.

        We fix this problem by having the reset algorithm check if the head element pointer is set, and if so, go to after
        head instead of before head.

2013-11-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        [HTML parser] reset insertion mode appropriate must check for "in select in table" mode
        https://bugs.webkit.org/show_bug.cgi?id=123850

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/2cb7523df57dfb48111f6aa16b7138cd54024ba7

        The HTML specification has been updated to detect encountering a template element inside of a select element,
        which in turn is inside of a table element. In this case, the select element will cause the parser to be in
        "InSelectInTable" mode. Thus when the template element closes, it should return to that mode.

        The fix here is that resetInsertionModeAppropriately must continue looking up the stack if the first node is
        select element to see whether the select element is inside of a table element.

        See also: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately

        Test: html5lib/resources/template.dat

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

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Build fix for last commit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Not reviewed.

        No new tests.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Introducing VMEntryScope to update the VM stack limit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Reviewed by Geoffrey Garen.

        No new tests.

        Renamed dynamicGlobalObject() to vmEntryGlobalObject().
        Replaced uses of DynamicGlobalObjectScope with VMEntryScope.

        * ForwardingHeaders/runtime/VMEntryScope.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::firstDOMWindow):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::vmEntryGlobalObject):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::convertValueToObjcObject):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):

2013-11-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Ryosuke Niwa.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Clear TemplateContentDocumentFragment::m_host when HTMLTemplateElement is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=122806

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/858ed5f6341de9d900768c1f4668fcfce870c52e

        The document fragment of a template element outlives the element itself.
        Clear the host property on the document fragment when that happens.

        Test: fast/dom/HTMLTemplateElement/content-outlives-template-crash.html

        * dom/TemplateContentDocumentFragment.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::~HTMLTemplateElement):
        * html/HTMLTemplateElement.h:

2013-11-20  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement CSS -webkit-alt property (text alternative for generated content pseudo-elements ::before and ::after)
        https://bugs.webkit.org/show_bug.cgi?id=120188

        Reviewed by Dean Jackson.

        Add a -webkit-alt CSS property that can be used to label Image content or Text content for accessibility clients.

        To accomplish this, it sets the string in the RenderStyle. Then when the ContentData creates an anonymous renderer,
        it sets that string on the TextFragment or RenderImage, which can be queried by accessibility code.

        Test: platform/mac/accessibility/webkit-alt-for-css-content.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::objectInclusionFromAltText):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::altTextToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAlt):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::altText):
        (WebCore::RenderImage::setAltText):
        * rendering/RenderTextFragment.h:
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        (WebCore::TextContentData::createRenderer):
        * rendering/style/ContentData.h:
        (WebCore::ContentData::setAltText):
        (WebCore::ContentData::altText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setContentAltText):
        (WebCore::RenderStyle::contentAltText):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.h:

2013-11-20  Roger Fong  <roger_fong@apple.com>

        Use compile flag SH_UNFOLD_SHORT_CIRCUIT when compiling shaders.
        https://bugs.webkit.org/show_bug.cgi?id=124684.

        Reviewed by Brent Fulgham.

        Existing test webgl/1.0.2/conformance/glsl/misc/shader-with-short-circuiting-operators.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-11-20  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL related errors
        https://bugs.webkit.org/show_bug.cgi?id=119436

        Reviewed by Brent Fulgham.

        Set the exact SSL verification error on CURL
        and store the enabled domain with certificate.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::sslErrors):
        (WebCore::ResourceError::setSSLErrors):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp: Added.
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::sslCertificateFlag):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):
        (WebCore::sslctxfun):
        (WebCore::setSSLVerifyOptions):
        * platform/network/curl/SSLHandle.h: Added.

2013-11-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Parse new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124618

        Reviewed by Antti Koivisto.

        Implement parsing of the new cicle shape syntax. The implementation of
        the old syntax has been move aside as deprecated, and will be removed
        once the new syntax is stable.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Create a CSSPrimitiveValue from a
            BasicShapeCenterCoordinate.
        (WebCore::valueForBasicShape): Convert new basic shape and rename old
            one.
        (WebCore::convertToCenterCoordinate): Create a
            BasicShapeCenterCoordinate from a CSSPrimitiveValue.
        (WebCore::basicShapeForValue): Convert new shape value and rename old
            one.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Build a new circle string.
        (WebCore::CSSBasicShapeCircle::cssText): Serialize the new circle
            shape.
        (WebCore::CSSBasicShapeCircle::equals): Compare new circle shapes.
        (WebCore::CSSBasicShapeCircle::serializeResolvingVariables):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapeCircle::CSSBasicShapeCircle): Add class for new
            circle shape.
        (WebCore::CSSDeprecatedBasicShapeCircle::create): Renamed to move out
            of the way of the new circle implementation.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::radius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setRadius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::CSSDeprecatedBasicShapeCircle): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Parse the radius for the new
            circle syntax. Will also be used by the new ellipse syntax.
        (WebCore::CSSParser::parseBasicShapeCircle): Parse the new circle
            syntax.
        (WebCore::CSSParser::parseDeprecatedBasicShapeCircle): Rename to make
            way for the new implementation.
        (WebCore::isDeprecatedBasicShape): Check if we have a new circle or an
            old circle.
        (WebCore::CSSParser::parseBasicShape): Update to parse the new circle
            syntax.
        * css/CSSParser.h:
        * css/CSSValueKeywords.in: Add support for the new circle keywords.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): 
        * rendering/style/BasicShapes.cpp: Deprecate old circle and add stub
            for layout code.
        (WebCore::DeprecatedBasicShapeCircle::path): Rename to make way for
            the new implementation.
        (WebCore::DeprecatedBasicShapeCircle::blend): Rename to make way for
            the new implementation.
        (WebCore::BasicShapeCircle::path): Create path for new circle shape.
        (WebCore::BasicShapeCircle::blend): Interpolate the new circle shape.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate):
            Represent an x or y coordinate for the center of a new circle,
            since it can be either a keyword along with an offset that cannot
            be resolved until layout time or an ordinary Length. This will
            also be used by the new ellipse implementation.
        (WebCore::BasicShapeCenterCoordinate::keyword):
        (WebCore::BasicShapeCenterCoordinate::length):
        (WebCore::BasicShapeCenterCoordinate::blend): Interpolate.
        (WebCore::BasicShapeRadius::BasicShapeRadius): Represent the radius of
            a new circle shape since it can either be a straightforward Length or
            a keyword that cannot be resolved until layout time.
        (WebCore::BasicShapeRadius::value):
        (WebCore::BasicShapeRadius::type):
        (WebCore::BasicShapeRadius::blend): Interpolate.
        (WebCore::BasicShapeCircle::centerX):
        (WebCore::BasicShapeCircle::centerY):
        (WebCore::BasicShapeCircle::radius):
        (WebCore::BasicShapeCircle::setCenterX):
        (WebCore::BasicShapeCircle::setCenterY):
        (WebCore::BasicShapeCircle::setRadius):
        (WebCore::BasicShapeCircle::BasicShapeCircle): New circle class.
        (WebCore::DeprecatedBasicShapeCircle::create): Rename to make room for
            new circle implementation.
        (WebCore::DeprecatedBasicShapeCircle::DeprecatedBasicShapeCircle): Ditto.

2013-11-20  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add BoxShape and FloatRoundingRect classes
        https://bugs.webkit.org/show_bug.cgi?id=124368

        Reviewed by Dean Jackson.

        Added the BoxShape class. It's now used to represent shape-outside box
        values: [margin/border/padding/content]-box. BoxShape depends on a new
        FloatRoundedRect class, which is a float analog of the existing (int)
        RoundedRect class. The FloatRoundedRect class contains the same basic
        methods and accessors as BorderRect and adds a set of four methods,
        for example topLeftCorner(), that return a FloatRect that represents the
        bounds of one elliptical corner. I also added a method, xInterceptsAtY()
        that returns two X coordinates of the intersection between a horizontal
        line and the rounded rectangle.

        No new tests, this is just an internal refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatRoundedRect.cpp: Added.
        (WebCore::FloatRoundedRect::FloatRoundedRect):
        (WebCore::FloatRoundedRect::Radii::isZero):
        (WebCore::FloatRoundedRect::Radii::scale):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::cornerRectIntercept):
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * platform/graphics/FloatRoundedRect.h: Added.
        (WebCore::FloatRoundedRect::Radii::Radii):
        (WebCore::FloatRoundedRect::Radii::setTopLeft):
        (WebCore::FloatRoundedRect::Radii::setTopRight):
        (WebCore::FloatRoundedRect::Radii::setBottomLeft):
        (WebCore::FloatRoundedRect::Radii::setBottomRight):
        (WebCore::FloatRoundedRect::Radii::topLeft):
        (WebCore::FloatRoundedRect::Radii::topRight):
        (WebCore::FloatRoundedRect::Radii::bottomLeft):
        (WebCore::FloatRoundedRect::Radii::bottomRight):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::FloatRoundedRect::Radii::shrink):
        (WebCore::FloatRoundedRect::rect):
        (WebCore::FloatRoundedRect::radii):
        (WebCore::FloatRoundedRect::isRounded):
        (WebCore::FloatRoundedRect::isEmpty):
        (WebCore::FloatRoundedRect::setRect):
        (WebCore::FloatRoundedRect::setRadii):
        (WebCore::FloatRoundedRect::move):
        (WebCore::FloatRoundedRect::inflate):
        (WebCore::FloatRoundedRect::expandRadii):
        (WebCore::FloatRoundedRect::shrinkRadii):
        (WebCore::FloatRoundedRect::topLeftCorner):
        (WebCore::FloatRoundedRect::topRightCorner):
        (WebCore::FloatRoundedRect::bottomLeftCorner):
        (WebCore::FloatRoundedRect::bottomRightCorner):
        (WebCore::operator==):
        * rendering/shapes/BoxShape.cpp: Added.
        (WebCore::BoxShape::BoxShape):
        (WebCore::BoxShape::getExcludedIntervals):
        (WebCore::BoxShape::getIncludedIntervals):
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h: Added.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Simple line layout should support floats
        https://bugs.webkit.org/show_bug.cgi?id=124666

        Reviewed by Dave Hyatt.

        Tests: fast/text/simple-lines-float-compare.html
               fast/text/simple-lines-float.html

        * rendering/line/LineWidth.h:
        (WebCore::LineWidth::logicalLeftOffset):
        
            Expose the left offset so we don't need to recompute it.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::computeLineLeft):
        
            Include the left offset from floats.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Keep the flow height updated during the loop as LineWidth reads the current position from there.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        
            We now bake the border and the padding to the line left offset. No need to add it during resolve.

2013-11-20  Alexey Proskuryakov  <ap@apple.com>

        Use std::function callbacks in CryptoAlgorithm instead of JS promises
        https://bugs.webkit.org/show_bug.cgi?id=124673

        Reviewed by Anders Carlsson.

        To implement key wrapping/unwrapping, we'll need to chain existing operations.
        It's much easier to do with C++ callbacks than with functions fulfilling JS
        promises directly.

        Also, this will decouple CryptoAlgorithm from JS, which is nice.

        SubtleCrypto IDL says that all functions return Promise<any>, but in reality,
        there is very little polymorphism, the only function whose return type depends
        on algorithm is generateKey (it can create a Key or a KeyPair).

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::PromiseWrapper::PromiseWrapper):
        (WebCore::PromiseWrapper::operator=):
        * bindings/js/JSDOMPromise.h:
        Made it copyable, as each crypto function wraps the promise in success and failure
        functional objects now.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        (WebCore::CryptoAlgorithm::generateKey):
        (WebCore::CryptoAlgorithm::deriveKey):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):

2013-11-20  Robert Hogan  <robert@webkit.org>

        REGRESSION(r127163): Respect clearance set on ancestors when placing floats
        https://bugs.webkit.org/show_bug.cgi?id=119979

        Reviewed by David Hyatt.

        Refactor the way self-collapsing blocks with clearance are positioned so that they
        get the correct logical-top position during margin-collapsing.

        Test: fast/block/margin-collapse/self-collapsing-block-with-float-descendants.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        * rendering/RenderBlockFlow.h:

2013-11-20  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK] Remove Chromium as user agent and claim to be Safari in OS X
        https://bugs.webkit.org/show_bug.cgi?id=124229

        Reviewed by Martin Robinson.

        http://www.duolingo.com/ doesn't get render correctly because it uses
        Chrome/Chromium specific variables, added after it was forked. Because
        of this, it is necessary to remove the Chrome/Chromium identification
        in the user agent. Also, from now on, by default, The GTK+ port will
        claim to be Safari in OS X to avoid loading wrong resources.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

2013-11-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159551.
        http://trac.webkit.org/changeset/159551
        https://bugs.webkit.org/show_bug.cgi?id=124669

        made many tests asserts (Requested by anttik on #webkit).

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Zoltan Horvath  <zoltan@webkit.org>

        Move LineWidth.{h,cpp} into rendering/line
        <https://webkit.org/b/124448>

        Reviewed by David Hyatt.

        In r159354 I introduced line directory. Now it's time to move the helper classes of RenderBlockLineLayout into 'line' subdirectory.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineWidth.cpp: Renamed from Source/WebCore/rendering/LineWidth.cpp.
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine):
        (WebCore::LineWidth::fitsOnLineIncludingExtraWidth):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingWhitespace):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        (WebCore::LineWidth::commit):
        (WebCore::LineWidth::applyOverhang):
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::setTrailingWhitespaceWidth):
        (WebCore::LineWidth::updateCurrentShapeSegment):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingCollapsedWhitespace):
        * rendering/line/LineWidth.h: Renamed from Source/WebCore/rendering/LineWidth.h.
        (WebCore::LineWidth::currentWidth):
        (WebCore::LineWidth::uncommittedWidth):
        (WebCore::LineWidth::committedWidth):
        (WebCore::LineWidth::availableWidth):
        (WebCore::LineWidth::addUncommittedWidth):
        (WebCore::LineWidth::shouldIndentText):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Alphabetization followup to r159567

        Reviewed by style-bot  :(

        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Rename IDBMetadata.h to IDBDatabaseMetadata.h
        https://bugs.webkit.org/show_bug.cgi?id=124668

        Reviewed by Dean Jackson.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBDatabaseMetadata.h: Renamed from Source/WebCore/Modules/indexeddb/IDBMetadata.h.
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):

        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove bogus assertions in updateNameForTreeScope and updateNameForDocument
        https://bugs.webkit.org/show_bug.cgi?id=124639

        Reviewed by Darin Adler.

        Removed assertions. We can't assert that the element in a tree scope or a document
        since these two functions are called from removedFrom.

        * dom/Element.cpp:
        (WebCore::Element::updateNameForTreeScope):
        (WebCore::Element::updateNameForDocument):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Cleanup getOrEstablishIDBDatabaseMetadata and stub it out in WK2
        https://bugs.webkit.org/show_bug.cgi?id=124635

        Reviewed by Tim Horton.

        getOrEstablishIDBDatabaseMetadata() should not have to take a database name parameter because the 
        server connection should already know what database name it represents.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openInternalAsync):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

2013-11-20  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] <video> and <audio> should be accessible.
        https://bugs.webkit.org/show_bug.cgi?id=124494

        Reviewed by Gyuyoung Kim.

        Adding descriptions of media-element controls.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::localizedMediaControlElementString):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Don't paint simple text runs outside the paint rect
        https://bugs.webkit.org/show_bug.cgi?id=124651

        Reviewed by Anders Carlsson.
        
        This speeds up partial paints for long text paragraphs. 
        Also add the same optimization for hit testing.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        
            Iterate over the run range that needs painting.

        (WebCore::SimpleLineLayout::hitTestFlow):
        
            Iterate over the line range that needs painting.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Range::Range):
        (WebCore::SimpleLineLayout::Range::begin):
        (WebCore::SimpleLineLayout::Range::end):
        
            Add Range type.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advance):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        
            Optimize case where runCount==lineCount. In this case we can just directly jump
            to the right run/line.

        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        
            Get the range corresponding to a rect. This currently cares about y coordinates only.

        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::rangeForRect):

2013-11-20  Antoine Quint  <graouts@apple.com>

        Cannot animate "points" attribute for <svg:polygon>
        https://bugs.webkit.org/show_bug.cgi?id=21371

        Reviewed by Antti Koivisto.

        Ensure we use animated list of points for SVG <polygon> and <polyline> elements
        when we build the path used to draw them, otherwise the animated changes won't
        be rendered and the base value will be used.

        Tests: svg/animations/polygon-set.svg
               svg/animations/polyline-set.svg

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):

2013-11-20  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move region styling code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122957

        Reviewed by Mihnea Ovidenie.

        The patch moves all the region styling functionality outside of RenderRegion
        to RenderNamedFlowFragment and outside of RenderFlowThread to RenderNamedFlowThread.
        This generates a couple of undesired casts that will be removed in later patches
        when everything CSS Regions specific will be located inside RenderNamedFlowThread
        and RenderNamedFlowFragment (e.g. the move of the isValid flag, the auto-height
        code etc.).

        The painting function was also moved from RenderRegion to RenderNamedFlowFragment. It
        was only used by the CSS Regions code. The new multi-column implementation has its own
        painting mechanism.

        Tests: No changed functionality, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        * rendering/RenderFlowThread.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderNamedFlowFragment::paintObject):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderNamedFlowThread::removeFlowChildInfo):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Darin Adler.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableSection|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Enable HTMLTemplateElement on Mac port
        https://bugs.webkit.org/show_bug.cgi?id=124637

        Reviewed by Tim Horton.

        Enabled the feature.

        * Configurations/FeatureDefines.xcconfig:

2013-11-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused member function declaration in DocumentOrderedMap.h
        https://bugs.webkit.org/show_bug.cgi?id=124629

        Reviewed by Ryosuke Niwa.

        checkConsistency() is not used anywhere.

        * dom/DocumentOrderedMap.h:

2013-11-19  Seokju Kwon  <seokju@webkit.org>

        Removal of redundant function call in Editor::insertTextWithoutSendingTextEvent
        https://bugs.webkit.org/show_bug.cgi?id=124563

        Reviewed by Brent Fulgham.

        No new tests needed, no behavior change.

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break after r159533.

        * CMakeLists.txt: Update ANGLE files.

2013-11-19  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Implement spin control on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123254

        Reviewed by Brent Fulgham.

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWinCE::paintInnerSpinButton):
        * rendering/RenderThemeWinCE.h:

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Update ANGLE sources.
        https://bugs.webkit.org/show_bug.cgi?id=124615.

        Reviewed by Dean Jackson.

        Tests covered by Khronos WebGL conformance tests.

        * platform/graphics/ANGLEWebKitBridge.cpp: Resolve a build error that resulted from updating ANGLE.
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):

2013-11-19  Filip Pizlo  <fpizlo@apple.com>

        Rename WatchpointSet::notifyWrite() should be renamed to WatchpointSet::fireAll()
        https://bugs.webkit.org/show_bug.cgi?id=124609

        Rubber stamped by Mark Lam.

        No new tests because no new behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):

2013-11-19  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Parse [<box> || <shape>] values
        https://bugs.webkit.org/show_bug.cgi?id=124426

        Reviewed by Dirk Schulze.

        Shape values can now have an optional box specifying the coordinate sytem to use
        for sizing and positioning the shape. This patch adds the functionality to support
        parsing these new values.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox): Added function to convert between BasicShape::ReferenceBox
        and CSSPrimitiveValue (which wraps a CSSValueID).
        (WebCore::boxForValue): Ditto.
        (WebCore::valueForBasicShape): Translations between CSSBasicShape and BasicShape
        must now include the reference box.
        (WebCore::basicShapeForValue): Ditto.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildRectangleString): Include the box in the built CSS string.
        (WebCore::CSSBasicShapeRectangle::cssText): Ditto.
        (WebCore::CSSBasicShapeRectangle::equals): Include the box in comparisions.
        (WebCore::buildCircleString):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildPolygonString):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::buildInsetRectangleString):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::box): BasicShapes now have an reference box.
        (WebCore::CSSBasicShape::setBox): Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Shape-inside can also
        parse the box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): The shape properties use parseShapeProperty,
        while minor adjustments were made to parseBasicShape's return type.
        (WebCore::isBoxValue): Is the CSSValueID one of  the box values.
        (WebCore::CSSParser::parseShapeProperty): Parse one of the shape properties
        and return an appropriate CSSValue.
        (WebCore::CSSParser::parseBasicShape): Return a CSSBasicShape rather than
        adding a ShapeValue to the style.
        * css/CSSParser.h:
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::box): Add a box to BasicShape and getters/setters.
        (WebCore::BasicShape::setBox): Ditto.
        (WebCore::BasicShape::BasicShape): Ditto.

2013-11-19  Jer Noble  <jer.noble@apple.com>

        [Mac] 9 WebGL conformance failures after r159518.
        https://bugs.webkit.org/show_bug.cgi?id=124608

        Reviewed by Dean Jackson.

        Once we removed the CIImage drawing path, there was no longer any reason to flip the
        CGImageRef before drawing to the provided GraphicsContext.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):

2013-11-19  Chris Fleizach  <cfleizach@apple.com>

        Web Speech API crashes onboundary event handling with reload
        https://bugs.webkit.org/show_bug.cgi?id=124607

        Reviewed by Tim Horton.

        If the page goes away, we need to cleanup the Mac platform synthesizer object, because
        NSSpeechSynthesizer is retained elsewhere to handle the callbacks (so it doesn't automatically
        get torn down).

        The layout tests for speech rely on a Mock synthesizer, so there is no good way to test this
        Mac platform specific behavior.       

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper invalidate]):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):

2013-11-19  Mark Lam  <mark.lam@apple.com>

        Add tracking of endColumn for Executables.
        https://bugs.webkit.org/show_bug.cgi?id=124245.

        Reviewed by Geoffrey Garen.

        Test: js/dom/script-start-end-locations.html

        * ForwardingHeaders/bytecode: Added.
        * ForwardingHeaders/bytecode/CodeBlock.h: Added.
        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::GetCallerCodeBlockFunctor::GetCallerCodeBlockFunctor):
        (WebCore::GetCallerCodeBlockFunctor::operator()):
        (WebCore::GetCallerCodeBlockFunctor::codeBlock):
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE] Support fastSeek() in MediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=124422

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-fastseek.html

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/MediaSource.h:

        Add support for "seek to the next fastest time" in MediaSource by
        returning the time of the nearest Sync sample.

        Move the data structure logic out of SourceBuffer and into it's own
        class:
        * Modules/mediasource/SampleMap.cpp: Added.
        (WebCore::SampleIsLessThanMediaTimeComparator::operator()):
        (WebCore::SampleIsGreaterThanMediaTimeComparator::operator()):
        (WebCore::SampleIsRandomAccess::operator()):
        (WebCore::SamplePresentationTimeIsWithinRangeComparator::operator()):
        (WebCore::SampleMap::addSample):
        (WebCore::SampleMap::removeSample):
        (WebCore::SampleMap::findSampleContainingPresentationTime):
        (WebCore::SampleMap::findSampleAfterPresentationTime):
        (WebCore::SampleMap::findSampleWithDecodeTime):
        (WebCore::SampleMap::reverseFindSampleContainingPresentationTime):
        (WebCore::SampleMap::reverseFindSampleBeforePresentationTime):
        (WebCore::SampleMap::reverseFindSampleWithDecodeTime):
        (WebCore::SampleMap::findSyncSamplePriorToPresentationTime):
        (WebCore::SampleMap::findSyncSamplePriorToDecodeIterator):
        (WebCore::SampleMap::findSyncSampleAfterPresentationTime):
        (WebCore::SampleMap::findSyncSampleAfterDecodeIterator):
        (WebCore::SampleMap::findSamplesBetweenPresentationTimes):
        (WebCore::SampleMap::findDependentSamples):
        * Modules/mediasource/SampleMap.h: Added.
        (WebCore::SampleMap::presentationBegin):
        (WebCore::SampleMap::presentationEnd):
        (WebCore::SampleMap::decodeBegin):
        (WebCore::SampleMap::decodeEnd):
        (WebCore::SampleMap::reversePresentationBegin):
        (WebCore::SampleMap::reversePresentationEnd):
        (WebCore::SampleMap::reverseDecodeBegin):
        (WebCore::SampleMap::reverseDecodeEnd):

        Add logic to find and return the time of the next & previous sync
        sample, within the threshold provided:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::setActive):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::provideMediaData):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::setActive):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateSeekToTime):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive-by fixes in HTMLMediaElement:
        * html/HTMLMediaSource.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::finishSeek): Cause the MediaSource to check the ready state of all its buffers.
        (HTMLMediaElement::selectNextSourceChild): Pass in whether the source element has a MediaSource URL.

        Implement the seekWithTolerance behavior in MockMediaPlayerMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::maxTimeSeekableDouble):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::seekToTime):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::flags):
        (WebCore::MockSourceBufferPrivate::setActive):
        (WebCore::MockSourceBufferPrivate::fastSeekTimeForMediaTime):
        (WebCore::MockSourceBufferPrivate::seekToTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-19  Jer Noble  <jer.noble@apple.com>

        [Mac] 10X slower than Chrome when drawing a video into a canvas
        https://bugs.webkit.org/show_bug.cgi?id=124599

        Reviewed by Dean Jackson.

        Improve performance by creating a CGImageRef which directly references the CVPixelBuffer provided
        by AVPlayerItemVideoOutput:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::CVPixelBufferReleaseBytePointerCallback):
        (WebCore::CVPixelBufferReleaseInfoCallback):
        (WebCore::createImageFromPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):

        Additionally, when asked to paint with an AVPlayerItemVideoOutput, block until the output notifies
        its delegate that a pixel buffer is available:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::globalPullDelegateQueue):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (-[WebCoreAVFPullDelegate initWithCallback:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        
        To further optimize video -> canvas drawing, add a method which can return a PassNativeImage to be
        drawn directly onto the canvas, rather than rendering into an intermediary context:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::nativeImageForCurrentTime):
        * html/HTMLVideoElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::nativeImageForCurrentTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::nativeImageForCurrentTime):

2013-11-19  Brady Eidson  <beidson@apple.com>

        Consolidate IDBBackingStore*Interface and IDBBackingStore*LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=124597

        Reviewed by Alexey Proskuryakov.

        The Interface abstraction doesn’t make sense anymore, as LevelDB will be the only implementor.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Removed.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::key):
        (WebCore::IDBBackingStoreCursorLevelDB::primaryKey):
        (WebCore::IDBBackingStoreCursorLevelDB::recordIdentifier):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:
        (WebCore::IDBBackingStoreTransactionLevelDB::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp:
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Get rid of bare new in SVGAnimatedColorAnimator::constructFromString()
        https://bugs.webkit.org/show_bug.cgi?id=124595

        Reviewed by Darin Adler.

        Use std::unique_ptr instead, to manage the arguments passed to the create
        methods of SVGAnimatedType.

        No new tests, covered by existing tests.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString): Replace bare
        pointer with std::unique_ptr.
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createAngleAndEnumeration): Use
        std::unique_ptr instead of bare pointer as parameter.
        (WebCore::SVGAnimatedType::createBoolean): Ditto.
        (WebCore::SVGAnimatedType::createColor): Ditto.
        (WebCore::SVGAnimatedType::createEnumeration): Ditto.
        (WebCore::SVGAnimatedType::createInteger): Ditto.
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger): Ditto.
        (WebCore::SVGAnimatedType::createLength): Ditto.
        (WebCore::SVGAnimatedType::createLengthList): Ditto.
        (WebCore::SVGAnimatedType::createNumber): Ditto.
        (WebCore::SVGAnimatedType::createNumberList): Ditto.
        (WebCore::SVGAnimatedType::createNumberOptionalNumber): Ditto.
        (WebCore::SVGAnimatedType::createPointList): Ditto.
        (WebCore::SVGAnimatedType::createPreserveAspectRatio): Ditto.
        (WebCore::SVGAnimatedType::createRect): Ditto.
        (WebCore::SVGAnimatedType::createString): Ditto.
        (WebCore::SVGAnimatedType::createTransformList): Ditto.
        * svg/SVGAnimatedType.h: Use std::unique_ptr as parameter in the
        create methods.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue): Make
        helper return std::unique_ptr instead of bare pointer.
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues): Ditto.

2013-11-19  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Refactor RectangleShape
        https://bugs.webkit.org/show_bug.cgi?id=124416

        Privatize and rename the FloatRoundedRect class defined in RectangleShape.h.
        The new class is called RectangleShape::ShapeBounds. This change enables
        creating a proper FloatRoundedRect analog of the existing RoundedRect class;
        part of adding support for box shapes, per the latest CSS spec.

        Reviewed by Dean Jackson.

        No new tests, just refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::ShapeBounds::paddingBounds):
        (WebCore::RectangleShape::ShapeBounds::marginBounds):
        (WebCore::RectangleShape::ShapeBounds::cornerInterceptForWidth):
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::ShapeBounds::ShapeBounds):
        (WebCore::RectangleShape::ShapeBounds::rx):
        (WebCore::RectangleShape::ShapeBounds::ry):

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Mark classes deriving from SVGAnimatedTypeAnimator as FINAL
        https://bugs.webkit.org/show_bug.cgi?id=124456

        Reviewed by Darin Adler.

        Also add OVERRIDE to their virtual methods appropriately and remove
        existing empty virtual destructors.

        No new tests, covered by existing ones.

        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:

2013-11-19  Brady Eidson  <beidson@apple.com>

        Add WebIDBServerConnection and DatabaseProcessIDBConnection stubs
        https://bugs.webkit.org/show_bug.cgi?id=124562

        Reviewed by Alexey Proskuryakov.

        Export some more symbols and headers for WK2 to use.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Tests: mathml/presentation/direction-overall.html
               mathml/presentation/direction-token.html
               mathml/presentation/direction.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): add dir
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): map dir
        * mathml/mathattrs.in: add the dir attribute
        * mathml/mathtags.in: add the mstyle tag (needed to use mstyleTag)

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        [SVG] Convert OwnPtr/PassOwnPtr to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124382

        Reviewed by Darin Adler.

        The files modified are mostly under WebCore/svg/; in a few cases, some
        "external" files needed changes as well.

        No new tests, covered by existing ones.

        * css/CSSFontFaceSource.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.cpp:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGAnimatorFactory.h:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontData.h:
        * svg/SVGFontElement.cpp:
        * svg/SVGFontElement.h:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathParser.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathUtilities.cpp:
        * svg/SVGPathUtilities.h:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.h:
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        * svg/properties/SVGAttributeToPropertyMap.h:

2013-11-19  Zoltan Horvath  <zoltan@webkit.org>

        Add LineInlineHeaders.h to WebCore.xcodeproj
        <https://webkit.org/b/124460>

        Reviewed by Csaba Osztrogonác.

        LineInlineHeaders.h (r159354) hasn't been added to WebCore.xcodeproj. This patch adds to it.

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Krzysztof Czech  <k.czech@samsung.com>

        [AX] Use std::unique_ptr to manage AXComputedObjectAttributeCache
        https://bugs.webkit.org/show_bug.cgi?id=124404

        Reviewed by Mario Sanchez Prada.

        Convert OwnPtr/PassOwnPtr to std::unique_ptr.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):
        * accessibility/AXObjectCache.h:
        (WebCore::AXComputedObjectAttributeCache::AXComputedObjectAttributeCache):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add more assertions with security implications in DocumentOrderedMap
        https://bugs.webkit.org/show_bug.cgi?id=124559

        Reviewed by Antti Koivisto.

        Assert that newly added elements and existing elements in the document ordered map are in the same tree scope
        as the document ordered map. Also exit early if we're about to add an element in a wrong document to the map.
        We don't exit early in get() because the damage has already been done at that point (the element may have been
        deleted already).

        * dom/Document.cpp:
        (WebCore::Document::addImageElementByLowercasedUsemap):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add): Assert that the newly added element is in the current tree scope.
        Also exit early if either the element is not in the tree scope or not in the right document.
        While this doesn't make the function completely fault safe, it'll catch when we try to add a detached node.
        (WebCore::DocumentOrderedMap::remove): Convert existing assertions to ones with security implication.
        (WebCore::DocumentOrderedMap::get): Assert with security implication that the element we're about to return
        is in the current tree scope. The element may have already been deleted if we ever hit these assertions.
        (WebCore::DocumentOrderedMap::getAllElementsById):  Convert an existing assertion to an assertion with security
        implication.
        * dom/DocumentOrderedMap.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::addLabel):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem):
        (WebCore::HTMLDocument::addWindowNamedItem):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto): Set InTreeScope flag before calling addImageElementByLowercasedUsemap.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedInto): Ditto for addImageMap.

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159455.
        http://trac.webkit.org/changeset/159455
        https://bugs.webkit.org/show_bug.cgi?id=124568

        broke two api tests (see bug 124564) (Requested by thorton on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Removed.
        * page/FrameSnapshotting.h: Removed.
        * page/mac/FrameMac.mm: Copied from Source/WebCore/page/win/FrameWin.h.
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/mac/FrameSnapshottingMac.h: Copied from Source/WebCore/page/win/FrameWin.h.
        * page/mac/FrameSnapshottingMac.mm: Added.
        (WebCore::imageFromRect):
        (WebCore::selectionImage):
        (WebCore::rangeImage):
        (WebCore::snapshotDragImage):
        * page/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
        (WebCore::Frame::nodeImage):
        * page/win/FrameWin.h:
        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize):
        (WebCore::createDragImageForLink):
        * platform/DragImage.h:

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Use hw.activecpu for determining how many processes to spawn.

        It's documented as the preferred way to determine the number of threads
        or processes to create in a SMP aware application.

        Rubber-stamped by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: aria-labelledby should be used in preference to aria-labeledby
        https://bugs.webkit.org/show_bug.cgi?id=62351

        Reviewed by Chris Fleizach.

        Making sure aria-labelled by overrides the incorrectly spelled aria-labeledby attribute.

        Test: accessibility/aria-labelledby-overrides-aria-labeledby.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByElements):

2013-11-18  Zalan Bujtas  <zalan@apple.com>

        use after free in WebCore::DocumentOrderedMap::remove / WebCore::TreeScope::removeElementById
        https://bugs.webkit.org/show_bug.cgi?id=121324

        Reviewed by Ryosuke Niwa.

        Update the document ordered map for an image element before dispatching load or error events
        when it's inserted into a document.

        Test: fast/dom/modify-node-and-while-in-the-callback-too-crash.html

        * dom/DocumentOrderedMap.cpp: defensive fix to avoid use after free issues.
        (WebCore::DocumentOrderedMap::remove):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): setting m_failedLoadURL makes
        repeated updateFromElement calls return early.

2013-11-18  Benjamin Poulain  <bpoulain@apple.com>

        Upstream iOS's ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=124554

        Reviewed by Sam Weinig.

        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::quickLookHandle):
        (WebCore::ResourceHandle::setQuickLookHandle):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::connectionProperties):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveDataArray):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::canRespondToProtectionSpace):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::currentRequest):
        (WebCore::ResourceHandle::connectionClientCallbacks):

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159430.
        http://trac.webkit.org/changeset/159430
        https://bugs.webkit.org/show_bug.cgi?id=124548

        WebCore can know nothing about nor use files from WebKit/
        (Requested by thorton on #webkit).

        * DerivedSources.make:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove IDBServerConnection's deprecatedBackingStore()
        https://bugs.webkit.org/show_bug.cgi?id=124547

        Reviewed by Tim Horton.

        It is no longer needed, as the front end no longer knows about the backing store.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: Add ability to fetch only visible table rows.
        https://bugs.webkit.org/show_bug.cgi?id=124430

        Reviewed by Chris Fleizach.

        Adding AccessibilityTable::visibleRows method to support AXVisibleRows attribute mac platform.

        Test: platform/mac/accessibility/table-visible-rows.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-18  Simon Fraser  <simon.fraser@apple.com>

        At some scales, opaque compositing layers have garbage pixels around the edges
        https://bugs.webkit.org/show_bug.cgi?id=124541

        Reviewed by Dean Jackson.
        
        Layers get marked as having opaque contents when their background is
        known to paint the entire layer. However, this failed to take into
        account two reasons why every pixel may not get painted.
        
        First, subpixel layout can result in non-integral RenderLayer
        bounds, which will get rounded up to an integral GraphicsLayer
        size. When this happens we may not paint edge pixels.
        
        Second, at non-integral scale factors, graphics context scaling
        may cause us to not paint edge pixels.
        
        Fix by only marking PlatformCALayers as having opaque contents
        when the contentsScale of the layer is integral.

        Not testable, because we can't guarantee to get garbage pixels
        in a ref test, and layer dumps show GraphicsLayer's notion of
        content opaqueness, not the one we set on the PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::isIntegral):
        (WebCore::clampedContentsScaleForScale):
        (WebCore::GraphicsLayerCA::updateRootRelativeScale):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::getTransformFromAnimationsWithMaxScaleImpact):
        Drive-by typo fix.
        (WebCore::GraphicsLayerCA::noteChangesForScaleSensitiveProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-11-18  David Hyatt  <hyatt@apple.com>

        Add a quirk to not respect center text-align when positioning

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

        Reviewed by Simon Fraser.

        Added fast/block/legacy-text-align-position-quirk.html

        * page/Settings.in:
        Add the quirk setting.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::startAlignedOffsetForLine):
        Don't pay attention to center text-align when the quirk is set.

2013-11-18  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Timothy Hatcher.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-11-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Crash when using media source
        https://bugs.webkit.org/show_bug.cgi?id=124525

        Reviewed by Philippe Normand.

        No new tests because this is already covered by tests in media/media-source (which aren't enabled because the feature isn't done).

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer): Add missing adoptRef()

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove unneeded BackingStore-related #include from IDBFactoryBackendInterface

        Rubberstamped by Beth Dakin.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change mediasource and mediastream modules to use nullptr
        https://bugs.webkit.org/show_bug.cgi?id=124530

        Reviewed by Tim Horton.

        No new tests needed, no behavior change.

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediastream/MediaStream.cpp:
        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/RTCStatsResponse.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Move execution of IDBCursorBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124463

        Reviewed by Tim Horton.

        This almost entirely removes knowledge of the backing store from the front end.

        The primary change here is to give cursors a unique ID.

        This way the IDBCursorBackend can reference itself by ID, while the 
        IDBServerConnection can handle mapping that ID to a backing store.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::IDBCursorBackend):
        (WebCore::IDBCursorBackend::deleteFunction):
        (WebCore::IDBCursorBackend::prefetchReset):
        (WebCore::IDBCursorBackend::close):
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clearCursorData):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::create):
        (WebCore::IDBCursorBackend::key):
        (WebCore::IDBCursorBackend::primaryKey):
        (WebCore::IDBCursorBackend::value):
        (WebCore::IDBCursorBackend::id):
        (WebCore::IDBCursorBackend::transaction):
        (WebCore::IDBCursorBackend::setSavedCursorID):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::key):
        (WebCore::CursorIterationOperation::callbacks):
        (WebCore::CursorAdvanceOperation::count):
        (WebCore::CursorAdvanceOperation::callbacks):
        (WebCore::CursorPrefetchIterationOperation::numberToFetch):
        (WebCore::CursorPrefetchIterationOperation::callbacks):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchReset):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-17  Jer Noble  <jer.noble@apple.com>

        [WTF] Media time should not have a constructor which accepts a single int or float.
        https://bugs.webkit.org/show_bug.cgi?id=124470

        Reviewed by Eric Carlson.

        Fix the compile error exposed by removing the default parameter in the MediaTime constructor.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::setTimestampOffset):

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change webaudio to use nullptr for null pointers
        https://bugs.webkit.org/show_bug.cgi?id=124526

        Reviewed by Anders Carlsson.

        No new tests needed, no behavior change.

        * Modules/webaudio/AudioBuffer.cpp:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/ChannelMergerNode.cpp:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/OfflineAudioContext.cpp:
        * Modules/webaudio/PeriodicWave.cpp:
        * Modules/webaudio/ScriptProcessorNode.cpp:

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Basic authentication is not reused.
        https://bugs.webkit.org/show_bug.cgi?id=124452

        Reviewed by Brent Fulgham.

        After a successful basic authentication, the credentials are not reused for later requests.
        In the CFNetwork port, this is solved by trying basic authentication first, if credentials exists.
        Also, when a 401 response is received, the first thing the CFNetwork port does, is to use
        m_user/m_pass as credentials in the following request if they are set.
        This can be done the same way for the Curl version.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Try using m_user/m_pass as credentials first, if they are set.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest): Try basic authentication first, if credentials exists.

2013-11-18  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add file cache
        https://bugs.webkit.org/show_bug.cgi?id=123333

        Reviewed by Brent Fulgham.

        Implementation of on disc file cache
        for the curl network backend.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CurlCacheEntry.cpp: Added.
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::~CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::requestHeaders):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::loadCachedData):
        (WebCore::CurlCacheEntry::saveResponseHeaders):
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::generateBaseFilename):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::invalidate):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/CurlCacheEntry.h: Added.
        (WebCore::CurlCacheEntry::isInMemory):
        * platform/network/curl/CurlCacheManager.cpp: Added.
        (WebCore::CurlCacheManager::getInstance):
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::~CurlCacheManager):
        (WebCore::CurlCacheManager::setCacheDirectory):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didFinishLoading):
        (WebCore::CurlCacheManager::isCached):
        (WebCore::CurlCacheManager::requestHeaders):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::saveResponseHeaders):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::didFail):
        (WebCore::CurlCacheManager::loadCachedData):
        * platform/network/curl/CurlCacheManager.h: Added.
        (WebCore::CurlCacheManager::getCacheDirectory):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebKit version in user agent string is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=124454

        Reviewed by Brent Fulgham.

        * DerivedSources.make: Generate WebKitVersion.h

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add inspector json files to EXTRA_DIST and
        remove maketokenizer from EXTRA_DIST.
        * GNUmakefile.list.am: Add missing header files.

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLDataList|Html|EmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=124482

        Reviewed by Tim Horton.

        To clean up static_cast<HTMLFoo*>, toHTMLEmbedElement, toHTMLHtmlElement, toHTMLDataListElement
        are generated.

        No new tests, no behavior changes.

        * html/HTMLDataListElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement):
        * html/HTMLTagNames.in:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<HTMLFoo*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124480

        Reviewed by Tim Horton.

        Though there are toHTMLFoo(), some places are still using static_cast<>.
        Additionally, toHTMLBodyElement() is supported from now.

        No new tests, no behavior changes.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance):
        * dom/Document.cpp:
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::iconURLs):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState):
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::submitElementFromEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158760.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_text_track_get_id prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r158821): [GTK] API break due to removed properties in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124489

        Reviewed by Philippe Normand.

        In r158821, several properties were changed from readonly to
        CustomSetter. The GObject DOM bindings currently skips any
        attribute having a custom getter or setter, and those properties
        are not generated anymore. We should add support for generating
        attributes having a custom getter or setter in GObject DOM
        bindings generator, but to fix the ABI break now we bring the old
        implementatiom back as custom implementation. This fixes the ABI
        compatibility, but not the API since the GObject properties are
        not generated.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_audio_track_get_kind):
        (webkit_dom_audio_track_get_language):
        (webkit_dom_text_track_get_kind):
        (webkit_dom_text_track_get_language):
        (webkit_dom_video_track_get_kind):
        (webkit_dom_video_track_get_language):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158662.

        * bindings/gobject/webkitdom.symbols: Add missing prototypes.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r159208 and r159363.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_html_media_element_fast_seek prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r159363): [GTK] API break in webkit_dom_html_media_element_set_current_time
        https://bugs.webkit.org/show_bug.cgi?id=124485

        Reviewed by Philippe Normand.

        In r159363 currentTime attribute was changed to not raise
        exceptions. This breaks the API of GObject DOM bindings because we
        use a GError parameter for exceptions that has been removed.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_set_current_time): Custom
        implementation that receives a GError for backwards
        compatibility.
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Add
        webkit_dom_html_media_element_set_current_time prototype.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip
        webkit_dom_html_media_element_set_current_time since we are adding
        a custom implementation.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        Support exporting public RSASSA-PKCS1-v1_5 keys
        https://bugs.webkit.org/show_bug.cgi?id=124475

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsa-export-key.html

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForRSAComponents):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        Added said support (this part works with private keys too).

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::getPublicKeyComponents): Moved the logic for getting a
        public key from private one here for reuse in keySizeInBits().
        (WebCore::CryptoKeyRSA::isRestrictedToHash):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::exportData):
        Exposed information necessary for JWK serialization.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        RSASSA-PKCS1-v1_5 JWK import doesn't check key size
        https://bugs.webkit.org/show_bug.cgi?id=124472

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-small-key.html

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Added the checks.
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Check key size when
        importing.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Updated a comment.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        Updated a comment.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        JWK crypto key export result is a DOM string instead of an array buffer
        https://bugs.webkit.org/show_bug.cgi?id=124473

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::exportKey):
        Fix it.

2013-11-17  Sam Weinig  <sam@webkit.org>

        LayoutStateMaintainer should use references where possible
        https://bugs.webkit.org/show_bug.cgi?id=124471

        Reviewed by Dan Bernstein.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        Use uint8_t vectors for WebCrypto data
        https://bugs.webkit.org/show_bug.cgi?id=124466

        Reviewed by Sam Weinig.

        Using Vector<char> for crypto key data is somewhat non-idiomatic, and it gets simply
        dangerous for bignums, because signed arithmetic is not appropriate for bignum digits.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        No longer need to cast data to char* here.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoDigest.h:
        * crypto/CryptoKey.h:
        * crypto/keys/CryptoKeyAES.cpp:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.cpp:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoDigestMac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        Switched to Vector<uint8_t>.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents): Extracted from buildAlgorithmDescription() and simplified.
        (WebCore::CryptoKeyRSA::create): Switched to Vector<uint8_t>.
        (WebCore::CryptoKeyRSA::buildAlgorithmDescription): No longer need to copy data just
        to change type from Vector<char> to Vector<unsigned char>.
        (WebCore::bigIntegerToUInt32): Ditto. No longer need to cast types when dealing with the bignum.
        (WebCore::CryptoKeyRSA::generatePair): Improved an error message a little.

        * fileapi/FileReaderLoader.cpp: (WebCore::FileReaderLoader::convertToDataURL):
        * inspector/DOMPatchSupport.cpp: (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::archive):
        * platform/graphics/cg/ImageBufferCG.cpp: (WebCore::CGImageToDataURL):
        No longer need to cast data to char* here.

2013-11-17  Antti Koivisto  <antti@apple.com>

        REGRESSION (r158774): Iteration over element children is broken
        https://bugs.webkit.org/show_bug.cgi?id=124145

        Reviewed by Anders Carlsson.
        
        Mutation during traversal invalidates the position cache. After the mid-point we start
        traversing backwards as it the shortest path. However backward traversal of children-only
        HTMLCollection was wrong and would end up going to descendants.
        
        Reduction by yannick.poirier@inverto.tv.

        Test: fast/dom/htmlcollection-children-mutation.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::collectionTraverseBackward):
        
            Traverse direct children only when m_shouldOnlyIncludeDirectChildren bit is set.

2013-11-17  Zoltan Horvath  <zoltan@webkit.org>

        Move LineLayoutState.h into rendering/line
        <https://webkit.org/b/124458>

        Reviewed by Mihnea Ovidenie.

        LineLayoutState is a helper class of RenderBlockLineLayout, so I'm moving it into line subdirectory.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineLayoutState.h: Renamed from Source/WebCore/rendering/LineLayoutState.h.
        (WebCore::FloatWithRect::FloatWithRect):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::lineInfo):
        (WebCore::LineLayoutState::endLineLogicalTop):
        (WebCore::LineLayoutState::setEndLineLogicalTop):
        (WebCore::LineLayoutState::endLine):
        (WebCore::LineLayoutState::setEndLine):
        (WebCore::LineLayoutState::lastFloat):
        (WebCore::LineLayoutState::setLastFloat):
        (WebCore::LineLayoutState::floats):
        (WebCore::LineLayoutState::floatIndex):
        (WebCore::LineLayoutState::setFloatIndex):
        (WebCore::LineLayoutState::adjustedLogicalLineTop):
        (WebCore::LineLayoutState::setAdjustedLogicalLineTop):
        (WebCore::LineLayoutState::flowThread):
        (WebCore::LineLayoutState::setFlowThread):
        (WebCore::LineLayoutState::endLineMatched):
        (WebCore::LineLayoutState::setEndLineMatched):
        (WebCore::LineLayoutState::checkForFloatsFromLastLine):
        (WebCore::LineLayoutState::setCheckForFloatsFromLastLine):
        (WebCore::LineLayoutState::markForFullLayout):
        (WebCore::LineLayoutState::isFullLayout):
        (WebCore::LineLayoutState::usesRepaintBounds):
        (WebCore::LineLayoutState::setRepaintRange):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):

2013-11-17  Antti Koivisto  <antti@apple.com>

        Simple line path does not respect visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124467

        Reviewed by Anders Carlsson.

        Test: fast/text/text-visibility.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Build fix.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature):
        Now that the function became shorter, clang realized that a variable was used
        uninitialized in an impossible code path.

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Reviewed by Sam Weinig.

        Covered by existing tests.

        Changed all operations to take single CryptoOperationData objects.

        * bindings/js/JSCryptoOperationData.cpp:
        * bindings/js/JSCryptoOperationData.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:

2013-11-16  Zoltan Horvath  <zoltan@webkit.org>

        Remove the include of LineWidth.h from SimpleLineLayoutFunctions.cpp
        <https://webkit.org/b/124449>

        Reviewed by Antti Koivisto.

        I removed the include of LineWidth, since SimpleLineLayoutFunctions.cpp doesn't use it.

        No new tests, no behavior change.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-11-15  Alexey Proskuryakov  <ap@apple.com>

        Support exporting symmetric keys as JWK
        https://bugs.webkit.org/show_bug.cgi?id=124442

        Reviewed by Sam Weinig.

        Error handling is not consistent yet - some errors cause exceptions, and others
        result in rejected promises. This part of spec is incomplete, so I basically did
        what was most straightforward in each case.

        * bindings/js/JSCryptoKeySerializationJWK.h: 
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Updated a comment with a better link.
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForOctetSequence): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::addToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addBoolToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON): Ditto. The code for
        mapping is my best guess, this all needs to be specified.
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Build a JSON string for the key.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey): Updated a comment.
        (WebCore::JSSubtleCrypto::exportKey): Use CryptoKeySerialization (also for raw keys,
        for consistency).

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::algorithmIdentifier):
        (WebCore::CryptoKey::usagesBitmap):
        Exposed data needed for building JWK (it used to be only exposed in a form suitable
        for DOM accessors).

        * crypto/keys/CryptoKeyHMAC.h: Ditto, added an accessor for JWK.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        * crypto/keys/CryptoKeySerializationRaw.h:
        Moved from JSSubtleCryptoCustom.cpp for consistency.

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move IDBCursorBackend operations into their own files
        https://bugs.webkit.org/show_bug.cgi?id=124444

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::cursorType):
        (WebCore::IDBCursorBackend::deprecatedBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetSavedBackingStoreCursor):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp: Added.
        (WebCore::CallOnDestruct::CallOnDestruct):
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h: Added.
        (WebCore::CursorIterationOperation::create):
        (WebCore::CursorIterationOperation::CursorIterationOperation):
        (WebCore::CursorAdvanceOperation::create):
        (WebCore::CursorAdvanceOperation::CursorAdvanceOperation):
        (WebCore::CursorPrefetchIterationOperation::create):
        (WebCore::CursorPrefetchIterationOperation::CursorPrefetchIterationOperation):

2013-11-14  David Farler  <dfarler@apple.com>

        Copy ASAN flag settings to WebCore and JavaScriptCore intermediate build tools
        https://bugs.webkit.org/show_bug.cgi?id=124362

        Reviewed by David Kilzer.

        No new tests needed.

        * WebCore.xcodeproj/project.pbxproj:
        Use ASAN_C*FLAGS for WebCoreExportFileGenerator.

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [Mac][AVF] Allow video and audio tracks to be initialized with an AVAssetTrack.
        https://bugs.webkit.org/show_bug.cgi?id=124421

        Reviewed by Eric Carlson.

        Currently, VideoTrackPrivateAVFObjC and AudioTrackPrivateAVFObjC are initialized with an
        AVPlayerItemTrack, but most of its methods use the AVAssetTrack wrapped by the
        AVPlayerItemTrack. Allow these objects to be alternatively initialized with an AVAssetTrack.

        Add factory methods taking an AVAssetTrack:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        (WebCore::AudioTrackPrivateAVFObjC::create):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
        (WebCore::AudioTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
        (WebCore::VideoTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:

        Use m_assetTrack instead of [m_playerItemTrack assetTrack]:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        (WebCore::AVTrackPrivateAVFObjCImpl::assetTrack):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
        (WebCore::AVTrackPrivateAVFObjCImpl::enabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::setEnabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::id):
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        (WebCore::AVTrackPrivateAVFObjCImpl::language):
        (WebCore::AVTrackPrivateAVFObjCImpl::trackID):


2013-11-15  Brady Eidson  <beidson@apple.com>

        Let IDBDatabaseBackend create IDBTransactionBackend's directly
        https://bugs.webkit.org/show_bug.cgi?id=124438

        Reviewed by Beth Dakin.

        Create IDBTransactionBackends directly:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        Remove maybeCreateTransactionBackend():
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement should not throw an exception from setCurrentTime or fastSeek.
        https://bugs.webkit.org/show_bug.cgi?id=124294

        Reviewed by Eric Carlson.

        Update the seek logic to match the current specification. This means removing exception
        throwing from both the .idl and the implementation. 

        Remove the ExceptionCode parameter from setCurrentTime and fastSeek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek):
        (HTMLMediaElement::seek):
        (HTMLMediaElement::seekWithTolerance):
        (HTMLMediaElement::setCurrentTime):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::setCurrentTime):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:

        Do not pass in an ExceptionCode placeholder when calling seek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::rewind):
        (HTMLMediaElement::returnToRealtime):
        (HTMLMediaElement::finishSeek):
        (HTMLMediaElement::playInternal):
        (HTMLMediaElement::mediaPlayerTimeChanged):
        (HTMLMediaElement::mediaPlayerDurationChanged):
        (HTMLMediaElement::applyMediaFragmentURI):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::bringElementUpToSpeed):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove last vestiges of IDBBackingStore* from IDBTransactionBackend.
        https://bugs.webkit.org/show_bug.cgi?id=124436

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBFactoryBackendInterface.h: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h: Removed createCursorBackend.

        * Modules/indexeddb/IDBCursorBackend.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Make IDBIndexWriter a LevelDB specific concept
        https://bugs.webkit.org/show_bug.cgi?id=124434

        Reviewed by Tim Horton.

        This includes renaming the class and moving it into the leveldb subdirectory.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.cpp.
        (WebCore::IDBIndexWriterLevelDB::IDBIndexWriterLevelDB):
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.h.
        (WebCore::IDBIndexWriterLevelDB::create):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::put):

2013-11-15  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: DOM.performSearch should accept a list of context nodes
        https://bugs.webkit.org/show_bug.cgi?id=124390

        Reviewed by Timothy Hatcher.

        Extracted the code in InspectorDOMAgent::performSearch into its own helper class
        called InspectorNodeFinder. Also added a new array parameter called "nodeIds"
        that can be used to limit the search results to just partial subtrees.

        Tests: inspector-protocol/dom/dom-search-crash.html
               inspector-protocol/dom/dom-search-with-context.html
               inspector-protocol/dom/dom-search.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/protocol/DOM.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorNodeFinder.cpp: Added.
        (WebCore::stripCharacters):
        (WebCore::InspectorNodeFinder::InspectorNodeFinder):
        (WebCore::InspectorNodeFinder::performSearch):
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        (WebCore::InspectorNodeFinder::matchesAttribute):
        (WebCore::InspectorNodeFinder::matchesElement):
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):
        * inspector/InspectorNodeFinder.h: Added.
        (WebCore::InspectorNodeFinder::results):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove IDBBackingStoreInterface.h includes that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=124433

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

2013-11-15  Zoltan Horvath  <zoltan@webkit.org>

        Move BreakingContext and LineBreaker into their own files
        <https://webkit.org/b/124336>

        Reviewed by David Hyatt.

        In this change I introduced 'line' subdirectory inside 'rendering', this directory will contain all the classes
        which have been refactored from RenderBlockLineLayout.cpp. This change contains the separation of BreakingContext,
        and the separation of LineBreaker classes. Since I wanted to keep the helper functions organized, I also added a
        new file called LineInlineHeaders.h, which contains the functions which used in LineBreaker.h and BreakingContext.h.
        I moved LineInfo class into line directory. It was necessary this time, since I added a cpp for it. I'll move the
        rest of the line layout related helper classes later. (I wanted to minimize merge conflicts.)

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun):
        * rendering/line/BreakingContextInlineHeaders.h: Added.
        (WebCore::WordMeasurement::WordMeasurement):
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::deprecatedAddMidpoint):
        (WebCore::startIgnoringSpaces):
        (WebCore::stopIgnoringSpaces):
        (WebCore::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::previousInFlowSibling):
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::firstPositiveWidth):
        (WebCore::updateSegmentsForShapes):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::nextCharacter):
        (WebCore::updateCounterIfNeeded):
        (WebCore::measureHyphenWidth):
        (WebCore::textWidth):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp: Added.
        (WebCore::LineBreaker::reset):
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h: Added.
        (WebCore::LineBreaker::LineBreaker):
        (WebCore::LineBreaker::lineWasHyphenated):
        (WebCore::LineBreaker::positionedObjects):
        (WebCore::LineBreaker::clear):
        * rendering/line/LineInfo.cpp: Added.
        (WebCore::LineInfo::setEmpty):
        * rendering/line/LineInfo.h: Renamed from Source/WebCore/rendering/LineInfo.h.
        (WebCore::LineInfo::LineInfo):
        (WebCore::LineInfo::isFirstLine):
        (WebCore::LineInfo::isLastLine):
        (WebCore::LineInfo::isEmpty):
        (WebCore::LineInfo::previousLineBrokeCleanly):
        (WebCore::LineInfo::floatPaginationStrut):
        (WebCore::LineInfo::runsFromLeadingWhitespace):
        (WebCore::LineInfo::resetRunsFromLeadingWhitespace):
        (WebCore::LineInfo::incrementRunsFromLeadingWhitespace):
        (WebCore::LineInfo::setFirstLine):
        (WebCore::LineInfo::setLastLine):
        (WebCore::LineInfo::setPreviousLineBrokeCleanly):
        (WebCore::LineInfo::setFloatPaginationStrut):
        * rendering/line/LineInlineHeaders.h: Added.
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):
        (WebCore::lineStyle):
        (WebCore::requiresLineBoxForContent):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::skipNonBreakingSpace):
        (WebCore::alwaysRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::setStaticPositions):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move execution of IDBTransactionBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124385

        Reviewed by Tim Horton.

        Each IDBOperation has it’s ::perform() moved to a method on IDBServerConnection.
        This almost removes all knowledge of the backing stores from the front end.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::clear):

        Add methods to reflect each transaction backend operation:
        * Modules/indexeddb/IDBServerConnection.h:

        Schedule certain operations with callbacks:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearObjectStoreOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        Make each operation’s perform() method defer to the IDBServerConnection (with a callback):
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearObjectStoreOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):

        Add accessors to each operation’s data members so the IDBServerConnection has everything it needs:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::objectStoreMetadata):
        (WebCore::DeleteObjectStoreOperation::objectStoreMetadata):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::version):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::callbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::databaseCallbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::CreateIndexOperation::objectStoreID):
        (WebCore::CreateIndexOperation::idbIndexMetadata):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::objectStoreID):
        (WebCore::DeleteIndexOperation::idbIndexMetadata):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::objectStoreID):
        (WebCore::GetOperation::indexID):
        (WebCore::GetOperation::cursorType):
        (WebCore::GetOperation::keyRange):
        (WebCore::GetOperation::callbacks):
        (WebCore::GetOperation::autoIncrement):
        (WebCore::GetOperation::keyPath):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::putMode):
        (WebCore::PutOperation::objectStore):
        (WebCore::PutOperation::key):
        (WebCore::PutOperation::indexIDs):
        (WebCore::PutOperation::indexKeys):
        (WebCore::PutOperation::callbacks):
        (WebCore::PutOperation::value):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::objectStoreID):
        (WebCore::OpenCursorOperation::indexID):
        (WebCore::OpenCursorOperation::direction):
        (WebCore::OpenCursorOperation::cursorType):
        (WebCore::OpenCursorOperation::taskType):
        (WebCore::OpenCursorOperation::keyRange):
        (WebCore::OpenCursorOperation::cursorDirection):
        (WebCore::OpenCursorOperation::callbacks):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::objectStoreID):
        (WebCore::CountOperation::indexID):
        (WebCore::CountOperation::keyRange):
        (WebCore::CountOperation::callbacks):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::objectStoreID):
        (WebCore::DeleteRangeOperation::callbacks):
        (WebCore::DeleteRangeOperation::keyRange):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearObjectStoreOperation::create):
        (WebCore::ClearObjectStoreOperation::objectStoreID):
        (WebCore::ClearObjectStoreOperation::callbacks):
        (WebCore::ClearObjectStoreOperation::ClearObjectStoreOperation):

        Implement each operation in terms of the appropriate backing store, then perform the callback:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj:

2013-11-15  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCIceCandidate object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124369

        Reviewed by Eric Carlson.

        According to the spec the RTCIceCandidateInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable, and, if passed, must be a valid Dictionary. If the keys are not present, the string
        object that stores them in the RTCIceCandidate class, must be null in those cases. Also, if a key is present
        and its value is not valid an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/mediastream/RTCIceCandidate.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCIceCandidateCustom.cpp: Added.
        (WebCore::JSRTCIceCandidateConstructor::constructJSRTCIceCandidate):

2013-11-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159337.
        http://trac.webkit.org/changeset/159337
        https://bugs.webkit.org/show_bug.cgi?id=124423

        broke a bunch of fast/regions tests on EFL/GTK (Requested by
        philn on #webkit).

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderRegion::paintObject):
        (WebCore::RenderRegion::hitTestContents):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Antti Koivisto  <antti@apple.com>

        Hovering over text using simple line path should not cause switch to line boxes
        https://bugs.webkit.org/show_bug.cgi?id=124418

        Reviewed by Anders Carlsson.

        Test: fast/text/simple-lines-hover.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        
            Collect quads and rects directly from simple lines without requiring the line box switch.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects):
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads):
        
            Add these.

        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::start):
        (WebCore::SimpleLineLayout::RunResolver::Run::end):
        
            For future use.

2013-11-15  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Stephane Jadaud  <sjadaud@sii.fr>

        [GStreamer] Add support for Media Source API
        https://bugs.webkit.org/show_bug.cgi?id=99065

        The patch integrate a Media Source player for the GStreamer backend. The implementented architecture is:
        - MediaPlayerPrivateGStreamer engine is modified to support Media Source URIs (change blob:// to mediasourceblob://), in addition to the existing support for web (http/https/blob) URIs
        - Similar to the existing WebKitWebSrc gstreamer element that handles web URIs, a new gstreamer element named WebKitMediaSrc is implemented to handle Media Source URIs
        - WebKitMediaSrc registers its URI protocol handler, allowing uridecodebin to dynamically create the appropriate source element.
        - The WebKitMediaSrc element creates a bin with 2 appsrc: One for Audio and One for Video. Pads are dynamically linked at the reception of first video and audio buffers.

        Reviewed by Philippe Normand.

        Tests: Activate http/tests/media/media-source and media/media-source tests

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp: Added.
        (WebCore::MediaSourceGStreamer::open):
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::addSourceBuffer):
        (WebCore::MediaSourceGStreamer::setDuration):
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        * platform/graphics/gstreamer/MediaSourceGStreamer.h: Added.
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp: Added.
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::abort):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp: Added.
        (webKitMediaSrcAddSrc):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetProperty):
        (webKitMediaSrcGetProperty):
        (webKitMediaVideoSrcStop):
        (webKitMediaAudioSrcStop):
        (webKitMediaVideoSrcStart):
        (webKitMediaAudioSrcStart):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcQueryWithParent):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        (webKitMediaVideoSrcNeedDataMainCb):
        (webKitMediaAudioSrcNeedDataMainCb):
        (webKitMediaVideoSrcNeedDataCb):
        (webKitMediaAudioSrcNeedDataCb):
        (webKitMediaVideoSrcEnoughDataMainCb):
        (webKitMediaAudioSrcEnoughDataMainCb):
        (webKitMediaVideoSrcEnoughDataCb):
        (webKitMediaAudioSrcEnoughDataCb):
        (webKitMediaVideoSrcSeekMainCb):
        (webKitMediaAudioSrcSeekMainCb):
        (webKitMediaVideoSrcSeekDataCb):
        (webKitMediaAudioSrcSeekDataCb):
        (webKitMediaSrcSetMediaPlayer):
        (webKitMediaSrcSetPlayBin):
        (MediaSourceClientGstreamer::MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::~MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::didReceiveDuration):
        (MediaSourceClientGstreamer::didReceiveData):
        (MediaSourceClientGstreamer::didFinishLoading):
        (MediaSourceClientGstreamer::didFail):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h: Added.

2013-11-14  Victor Costan  <costan@gmail.com>

        XMLSerializer escapes < > & correctly inside <script> and <style> tags.
        https://bugs.webkit.org/show_bug.cgi?id=123914

        Reviewed by Darin Adler.

        Test: fast/dom/XMLSerializer-entities.html

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): vim removed some whitespace.
        (WebCore::MarkupAccumulator::entityMaskForText): Fixed the returned value for <script> etc in XML.

2013-11-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        ASSERTION FAILED: rangesIntersect(m_renderer.pixelSnappedLogicalTopForFloat(floatingObject), m_renderer.pixelSnappedLogicalBottomForFloat(floatingObject), m_lineTop, m_lineBottom) ../../Source/WebCore/rendering/FloatingObjects.cpp(463)
        https://bugs.webkit.org/show_bug.cgi?id=124375

        Reviewed by Alexandru Chiculita.

        When moving the placed floats tree over to LayoutUnit, I forgot to
        update these asserts, which causes issues on ports with subpixel
        layout enabled. 

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::::collectIfNeeded):

2013-11-14  Victor Costan  <costan@gmail.com>

        Clean up sequence handling in Blob constructor
        https://bugs.webkit.org/show_bug.cgi?id=124343

        Reviewed by Alexey Proskuryakov.

        Added test case to LayoutTests/fast/files/blob-constructor.html

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
            Handle exceptions in sequences, eliminate double type-checking for
            ArrayBuffer, ArrayBufferView and Blob parts.

2013-11-14  Oliver Hunt  <oliver@apple.com>

        Make CLoop easier to build, and make it work
        https://bugs.webkit.org/show_bug.cgi?id=124359

        Reviewed by Geoffrey Garen.

        Add cloop configuration info to WebCore FeatureDefines
        so that it's consistent with JSC

        * Configurations/FeatureDefines.xcconfig:

2013-11-14  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Martin Robinson.

        To solve the bug #58309 a cairo subsurface is being used to limit the
        source image boundaries.
        In many cases, when a cairo subsurface is used for drawing an image,
        it occurs an image copy, causing performance penalty. In the case of
        the function PlatformContextCairo::drawSurfaceToContext, the image
        copy always happens.
        So, we should use the subsurface only when it's really necessary.
        In cases where we're drawing the whole image, the subsurface is
        unnecessary.

        The proposed patch avoid the use of subsurfaces when sampling the whole
        image.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement raw format for WebCrypto key export
        https://bugs.webkit.org/show_bug.cgi?id=124376

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-export-key.html
               crypto/subtle/hmac-export-key.html

        A CryptoKey just exports its native CryptoKeyData, which will also work nicely for
        JWK format soon. For spki and pkcs8, we'll need to figure out the best way to
        utilize platform library support for ASN.1, but we are not there yet.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.idl:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportData):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportData):
        * crypto/keys/CryptoKeyHMAC.h:

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::exportData):
        Added a dummy implementation for RSA.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Simply generated domain dispatch methods for domains with few commands
        https://bugs.webkit.org/show_bug.cgi?id=124374

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Accept the new <box> value for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=124227

        Reviewed by David Hyatt.

        The shape-outside property can now be set to the box values [margin/border/padding/content]-box.
        This patch adds the parsing code required to accept the new values, and the layout code
        to create a rectangle shape that has the size and position of the appropriate box.

        Tests: fast/shapes/shape-outside-floats/shape-outside-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Output the new box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Accept the new box values.
        * css/CSSValueKeywords.in: Add margin-box value.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Accept the new box values.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderLogicalWidth): Added new utility methods to help
        with box sizing.
        (WebCore::RenderBoxModelObject::borderLogicalHeight): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalWidth): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalHeight): Ditto.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): You can create a shape from a box's dimensions, rather
        than always using a BasicShape or RasterShape value.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Create the appropriate shape based on the box values.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for the box size when using a box value.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Enable for the box values.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Disable for shape-inside.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Create the appropriate shape value for a box.
        (WebCore::ShapeValue::box): Return the box value for this ShapeValue.
        (WebCore::ShapeValue::ShapeValue): Create a ShapeValue from a box value.

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Tim Horton.

        Post-checkin review comment! StickToViewportBounds sounds better and more accurate 
        than StickToWindowBounds.

        * platform/ScrollTypes.h:

2013-11-13  Jer Noble  <jer.noble@apple.com>

        Unreviewed build failure; update MediaPlayerPrivateAVFFoundationCF::seekToTime after r159208.

        After r159208, seekToTime takes tolerance parameters.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::AVFWrapper::seekToTime):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Add a new mode where fixed elements don't constrain their positions during a
        rubber band
        https://bugs.webkit.org/show_bug.cgi?id=124260

        Reviewed by Tim Horton.

        This patch adds a new enum called ScrollBehaviorForFixedElements, which has
        two values, StickToDocumentBounds or StickToWindowBounds. StickToDocumentBounds 
        corresponds to our current behavior, where fixed elements constrain 
        their positions during a rubber-band so that they stay stuck to the document.
        The new mode, StickToWindowBounds, will cause fixed elements to always stay
        fixed relative to the window.

        scrollOffsetForFixedPosition() now takes a new parameter for the fixed behavior
        so that it knows whether or not to constrain the position.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition):
        
        Right now, just return StickToDocumentBounds and retain existing behavior.
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/FrameView.h:

        The scrolling thread needs to know about the fixed element scroll behavior,
        so this code makes ScrollingStateScrollingNodes keep track of that 
        information to pass over to the scrolling thread.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::setScrollBehaviorForFixedElementsForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        
        Here is the new enum.
        * platform/ScrollTypes.h:
        
        Another place where we only want to constrain scroll position if that is the
        mode we are in.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::customPositionForVisibleRectComputation):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] HMAC sign/verify crashes when key is empty
        https://bugs.webkit.org/show_bug.cgi?id=124372

        Reviewed by Sam Weinig.

        Test: crypto/subtle/hmac-sign-verify-empty-key.html

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature): Give it
        a non-null pointer then.

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Build fix.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:

2013-11-14  Samuel White  <samuel_white@apple.com>

        AX: Calling NSAccessibilityColumnsAttribute and NSAccessibilityRowsAttribute simply to get column/row count can be very expensive.
        https://bugs.webkit.org/show_bug.cgi?id=124293

        Reviewed by Chris Fleizach.

        Added ability to get accessibility table column or row count without fetching all columns or rows.

        Test: platform/mac/accessibility/table-column-and-row-count.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj: Added new files, removed Mac SHA algorithm files.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::getCommonCryptoDigestAlgorithm):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Implemented. These take two steps, first a digest is computed, and then it's signed.

        * crypto/CryptoDigest.h: Added.
        * crypto/mac/CryptoDigestMac.cpp: Added.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):
        Added a cross-platform interface and Mac implementation to compute a digest. It
        should be possible to use it outside WebCrypto if we need to (perhaps even merge
        with  WTF SHA-1 class).
        The Mac implementation is kind of ugly, but at least it encapsulates the ugliness.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Removed.
        These are all cross-platform now.

2013-11-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Empty polygons with non-zero shape-padding cause an ASSERT crash
        https://bugs.webkit.org/show_bug.cgi?id=124324

        Reviewed by Andreas Kling.

        PolygonShape::shapePaddingBounds() and PolygonShape::shapeMarginBounds() no
        longer attempt to compute a new FloatPolygon when the original is empty, i.e.
        when it has less than three vertices.

        Tests: fast/shapes/shape-inside/shape-inside-empty-polygon-crash.html
               fast/shapes/shape-outside-floats/shape-outside-floats-empty-polygon-crash.html

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::shapePaddingBounds): Don't compute a padding FloatPolygon if the original polygon is empty.
        (WebCore::PolygonShape::shapeMarginBounds): Don't compute a margin FloatPolygon if the original polygon is empty.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleaner Backend Method Calling Code Generation
        https://bugs.webkit.org/show_bug.cgi?id=124333

        Reviewed by Timothy Hatcher.

        No change in functionality, just improved generated code.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorBackendDispatcher.cpp:
        * inspector/InspectorBackendDispatcher.h:

2013-11-14  Seokju Kwon  <seokju@webkit.org>

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        https://bugs.webkit.org/show_bug.cgi?id=124334

        Reviewed by Christophe Dumez.

        No new tests, this is just refactoring.

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        and remove unnecessary code from DOMWindow.
        Because 'defaultstatus' is an alias of defaultStatus.

        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toSVGPolyline|gonElement() to replace static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124341

        Reviewed by Andreas Kling.

        toSVGFoo() supports more plenty helper functions. So, toSVGFoo() needs
        to be used instead of static_cast<>.

        Additionally, cleanup other static_cast<> as well.

        No new tests, no behavior changes.

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromEllipseElement):
        (WebCore::updatePathFromLineElement):
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/svgtags.in: Add *generateTypeHelpers* keyword to polygon, polyline

2013-11-14  Andreas Kling  <akling@apple.com>

        FontDescription copies should share families list, not duplicate it.
        <https://webkit.org/b/124338>

        Turn FontDescription::m_families into a RefCountedArray<AtomicString>
        instead of a Vector<AtomicString, 1>. This allows FontDescription to
        share the families list between copies, instead of each object having
        its own Vector.

        Also, FontDescription itself shrinks by 16 bytes.

        Reviewed by Antti Koivisto.

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce FILTER_TYPE_CASTS for child filter class
        https://bugs.webkit.org/show_bug.cgi?id=124332

        Reviewed by Andreas Kling.

        To use TYPE_CASTS_BASE, define FILTER_TYPE_CASTS macro. Thanks to 
        it, static_cast<SVGFilter*> can be replaced by toSVGFilter().

        No new tests, no behavior changes.

        * platform/graphics/filters/Filter.h:
            Add isSVGFilter() to check if casting object is SVGFilter object.
        (WebCore::Filter::isSVGFilter):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFilter.h:

2013-11-13  Victor Costan  <costan@gmail.com>

        Blob constructor accepts a sequence (array-like object) as first arg. 
        https://bugs.webkit.org/show_bug.cgi?id=124175

        Reviewed by Christophe Dumez.

        Added test cases to fast/files/script-tests/blob-constructor.js.

        * bindings/js/JSBlobCustom.cpp: Make the constructor work with sequences.
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJSSequence): Slightly better error message when conversion fails.
        (WebCore::toJS): Whitespace.
        (WebCore::jsArray): Whitespace.

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: InspectorBackendDispatcher improvements
        https://bugs.webkit.org/show_bug.cgi?id=124330

        Reviewed by Timothy Hatcher.

        * inspector/InspectorBackendDispatcher.cpp:
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcher.h:
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows Build Fix after r159268.

        Missed adding InspectorBackendDispatcher.h and cpp to the Windows build.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate Individual InspectorBackendDispatchers, add base InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=124296

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Add inspector/InspectorBackendDispatcher.{h,cpp}. This used to be almost entirely
            written in the code generator strings file, but make it actual source files
            because there is nothing changing in the code. Also clean this up a bit.
          - Give the base dispatcher a list of domain dispatchers and a way to register.
          - Make InspectorBackendDispatcher::dispatch read the domain of incoming request
            and pass the request on to the domain dispatcher.
          - Create per-domain dispatcher classes named "InspectorFooBackendDispatcher"
          - Convert "InspectorBackendDispatcher::FooCommandHandler" interfaces to
            "InspectorFooBackendDispatcherHandler" interfaces.
          - Convert all "InspectorBackendDispatcherImpl::FooDomain_fooMethod" methods to
            "InspectorFooBackendDispatcher::fooMethod" methods. These can also remove their
            "if (!agent)" checks because that can never be the case anymore.
          - Remove InspectorBackendDispatcherImpl, now that there are base and domain dispatchers.
          - Add ASCIILiteral in many places in generated code where possible.
          - In all agents, create dispatchers in didCreateFrontendAndBackend and clear
            them in willDestroyFrontendAndBackend, right alongside frontend dispatchers.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data.Res):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Generator):
        (Generator.go):
        (Generator.process_command):
        (Generator.generate_send_method):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (HashMap):
        (InspectorBackendDispatchers_h):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackendDispatcher.cpp: Added.
        (WebCore::InspectorBackendDispatcher::CallbackBase::CallbackBase):
        (WebCore::InspectorBackendDispatcher::CallbackBase::isActive):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendFailure):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendIfActive):
        (WebCore::InspectorBackendDispatcher::create):
        (WebCore::InspectorBackendDispatcher::registerDispatcherForDomain):
        (WebCore::InspectorBackendDispatcher::dispatch):
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        (WebCore::InspectorBackendDispatcher::getPropertyValue):
        (WebCore::AsMethodBridges::asInt):
        (WebCore::AsMethodBridges::asDouble):
        (WebCore::AsMethodBridges::asString):
        (WebCore::AsMethodBridges::asBoolean):
        (WebCore::AsMethodBridges::asObject):
        (WebCore::AsMethodBridges::asArray):
        (WebCore::InspectorBackendDispatcher::getInt):
        (WebCore::InspectorBackendDispatcher::getDouble):
        (WebCore::InspectorBackendDispatcher::getString):
        (WebCore::InspectorBackendDispatcher::getBoolean):
        (WebCore::InspectorBackendDispatcher::getObject):
        (WebCore::InspectorBackendDispatcher::getArray):
        * inspector/InspectorBackendDispatcher.h: Added.
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorSupplementalBackendDispatcher::~InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::~InspectorBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::clearFrontend):
        (WebCore::InspectorBackendDispatcher::isActive):
        (WebCore::InspectorBackendDispatcher::InspectorBackendDispatcher):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:

2013-11-13  Andy Estes  <aestes@apple.com>

        Use NSCalendarIdentifierGregorian instead of NSGregorianCalendar on OS X 10.9 and iOS
        https://bugs.webkit.org/show_bug.cgi?id=124323

        Reviewed by Mark Rowe.

        NSGregorianCalendar was deprecated in OS X 10.9 and iOS 7.

        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename InspectorBackendDispatcher.h to InspectorBackendDispatchers.h
        https://bugs.webkit.org/show_bug.cgi?id=124257

        Reviewed by Timothy Hatcher.

        Soon each domain will generate its own dispatcher, and the generic
        InspectorBackendDispatcher will no longer be generated, it will just
        live in WebCore/inspector.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorBackendDispatchers_h):
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/WorkerInspectorController.cpp:

2013-11-13  Andreas Kling  <akling@apple.com>

        Remove Document::m_savedRenderView pointer.
        <https://webkit.org/b/124310>

        This pointer held a copy of m_renderView while the document was in
        page cache, and null while it wasn't. It was not used for anything.

        Reviewed by Anders Carlsson.

2013-11-13  Brady Eidson  <beidson@apple.com>

        Move setIndexKeys() to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124301

        Reviewed by Anders Carlsson.

        This is a big step towards moving knowledge of the backing store out of the frontend.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorFrontendDispatchers from InspectorFrontend
        https://bugs.webkit.org/show_bug.cgi?id=124246

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Remove "class InspectorFrontend" that currently does nothing but hold
            sub-frontend dispatcher classes. Catches some stale code.
          - Generate individual "class InspectorFooFrontendDispatcher" classes for
            domains that have events. Catches some unnecessary classes.
          - Simplify the Base Agent interface from optional set/clearFrontend/register
            to required didCreateFrontendAndBackend/willDestroyFrontendAndBackend.
            New agents must implement this and this will be their cue to setup
            frontend and backend dispatchers.
          - Base Agent no longer needs to be templated or have an Interface class.
          - While we are changing subclass BaseAgent superclass calls, use ASCIILiteral
          - In agents with events, convert "InspectorFrontend::Foo* m_frontend" to
            "unique_ptr<InspectorFooFrontendDispatcher> m_frontendDispatcher" and
            update uses as appropriate within the classes.
          - In agents with events, create dispatchers in didCreateFrontendAndBackend
            and clear them in willDestroyFrontendAndBackend.

        * inspector/CodeGeneratorInspector.py:
        (Generator):
        (Generator.go):
        (Generator.process_event):
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorFrontendChannel):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::hasFrontend):
        * inspector/InspectorAgentRegistry.cpp:
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::didCreateFrontendAndBackend):
        (WebCore::InspectorAgentRegistry::willDestroyFrontendAndBackend):
        * inspector/InspectorAgentRegistry.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::discardAgent):
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCSSAgent::mediaQueryResultChanged):
        (WebCore::InspectorCSSAgent::didCreateNamedFlow):
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow):
        (WebCore::InspectorCSSAgent::regionLayoutUpdated):
        (WebCore::InspectorCSSAgent::regionOversetChanged):
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::styleSheetChanged):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::enable):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layerTreeDidChange):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        (WebCore::InspectorPageAgent::willRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::didRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::scriptsEnabled):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        (WebCore::InspectorProfilerAgent::toggleRecordButton):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::dispatchMessageFromWorker):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::workerGlobalScopeTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext):
        (WebCore::PageRuntimeAgent::notifyContextCreated):
        * inspector/PageRuntimeAgent.h:
        * inspector/TimelineRecordFactory.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::hasFrontend):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * inspector/protocol/Input.json:

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        Rename FrameView's repaintFixedElementsAfterScrolling and updateFixedElementsAfterScrolling
        https://bugs.webkit.org/show_bug.cgi?id=124306

        Reviewed by Tim Horton.
        
        FrameView::repaintFixedElementsAfterScrolling() didn't do any repainting, and didn't
        just apply to fixed elements. Rename it to updateLayerPositionsAfterScrolling().
        
        updateFixedElementsAfterScrolling() was also confusingly named; rename it
        to updateCompositingLayersAfterScrolling().

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
        * platform/ScrollView.h:
        (WebCore::ScrollView::updateLayerPositionsAfterScrolling):
        (WebCore::ScrollView::updateCompositingLayersAfterScrolling):

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for SVGPaint and SVGColor.
        <https://webkit.org/b/124285>

        Use CSS_VALUE_TYPE_CASTS to generate type casting helpers for the
        SVGPaint and SVGColor classes.

        Reviewed by Anders Carlsson.

2013-11-13  Benjamin Poulain  <bpoulain@apple.com>

        Update ResourceHandleCF to use the didReceiveBuffer() callback
        https://bugs.webkit.org/show_bug.cgi?id=124256

        Reviewed by Alexey Proskuryakov.

        Use didReceiveBuffer() instead of didReceiveData() to pass data back to
        the ResourceHandleClient. This unify the update code with the NSURLConnection loader.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::ResourceHandle::handleDataArray):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Split Inspector.json into individual domain json files
        https://bugs.webkit.org/show_bug.cgi?id=124098

        Reviewed by Timothy Hatcher.

        Split the Inspector domains into their own json file. Generate a
        combined Inspector.json from all of the json files at build time
        so that the CodeGenerator is unchanged.

        * .gitattributes:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        (TypeMap.__init__):
        * inspector/Inspector.json: Removed.
        * inspector/Scripts/generate-combined-inspector-json.py: Added.
        * inspector/protocol/ApplicationCache.json: Added.
        * inspector/protocol/CSS.json: Added.
        * inspector/protocol/Canvas.json: Added.
        * inspector/protocol/Console.json: Added.
        * inspector/protocol/DOM.json: Added.
        * inspector/protocol/DOMDebugger.json: Added.
        * inspector/protocol/DOMStorage.json: Added.
        * inspector/protocol/Database.json: Added.
        * inspector/protocol/Debugger.json: Added.
        * inspector/protocol/FileSystem.json: Added.
        * inspector/protocol/HeapProfiler.json: Added.
        * inspector/protocol/IndexedDB.json: Added.
        * inspector/protocol/Input.json: Added.
        * inspector/protocol/InspectorDomain.json: Added.
        * inspector/protocol/LayerTree.json: Added.
        * inspector/protocol/Memory.json: Added.
        * inspector/protocol/Network.json: Added.
        * inspector/protocol/Page.json: Added.
        * inspector/protocol/Profiler.json: Added.
        * inspector/protocol/Runtime.json: Added.
        * inspector/protocol/Timeline.json: Added.
        * inspector/protocol/Worker.json: Added.

2013-11-13  Zalan Bujtas  <zalan@apple.com>

        Code cleanup: change FrameView::doLayoutWithFrameFlattening() to make it more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=124238

        Reviewed by Simon Fraser.

        Rename doLayoutWithFrameFlattening() and change its signature so that it's inline with
        what it does.

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        * page/FrameView.h:

2013-11-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCSessionDescription object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124212

        Reviewed by Eric Carlson.

        According to the spec the RTCSessionDescriptionInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable. If the 'type' and/or 'sdp' keys are not present, the string object that stores
        them in the RTCSessionDescription class, must be null in those cases. Also, if an object that is not a
        Dictionary is passed as argument to the constructor, an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        * Modules/mediastream/RTCSessionDescription.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCSessionDescriptionCustom.cpp: Added.
        (WebCore::JSRTCSessionDescriptionConstructor::constructJSRTCSessionDescription):

2013-11-13  Tim Horton  <timothy_horton@apple.com>

        Fix release build after r159224.

        * WebCore.exp.in:

2013-11-13  Anders Carlsson  <andersca@apple.com>

        Remove ChromeClient::paintCustomOverhangArea
        https://bugs.webkit.org/show_bug.cgi?id=124304

        Reviewed by Beth Dakin.

        This function always returns false now; get rid of it.

        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintOverhangAreas):

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] The double bar vertical delimiter does not stretch properly
        https://bugs.webkit.org/show_bug.cgi?id=123543

        Reviewed by Chris Fleizach.

        * rendering/mathml/RenderMathMLOperator.cpp: Add stretching support for U+2225, which
        is another version of the vertical bar.

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        ASSERTION FAILED: m_repaintRect == renderer().clippedOverflowRectForRepaint(renderer().containerForRepaint()) after r135816
        https://bugs.webkit.org/show_bug.cgi?id=103432

        Reviewed by Dave Hyatt.

        RenderLayer caches repaint rects in m_repaintRect, and on updating layer
        positions after scrolling, asserts that the cached rect is correct. However,
        this assertion would sometimes fail if we were scrolling as a result of
        doing adjustViewSize() in the middle of layout, because we haven't updated
        layer positions post-layout yet.
        
        Fix by having the poorly named FrameView::repaintFixedElementsAfterScrolling()
        skip the layer updating if this FrameView is inside of adjusetViewSize() in
        layout.
        
        In order to know if we're inside view size adjusting, add a LayoutPhase
        member to FrameView, replacing two existing bools that track laying out state.

        Investigative work showed that there are many, many ways to re-enter FrameView::layout(),
        which makes it hard (but desirable) to more assertions about state changes, but
        indicated that saving and restoring the state (via TemporaryChange<LayoutPhase>)
        was a good idea.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        * page/FrameView.h:

2013-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete unused TextPainter function
        https://bugs.webkit.org/show_bug.cgi?id=124292

        Reviewed by Tim Horton.

        New tests are unnecessary since there is no behavior change

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):
        * rendering/TextPainter.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Check WebCrypto parameter types when casting
        https://bugs.webkit.org/show_bug.cgi?id=124297

        Reviewed by Sam Weinig.

        Also changed existing toCryptoXXX functions to use TYPE_CASTS_BASE mechanism.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        And sure enough, there was a bug caught by the added checks.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        (WebCore::CryptoAlgorithmParameters::parametersClass):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeySerialization.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::isCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        (WebCore::isCryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html is failing on Maverics release bot
        https://bugs.webkit.org/show_bug.cgi?id=124280

        Reviewed by Anders Carlsson.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        Don't be a muppet, initialize your variables.

2013-11-12  Jer Noble  <jer.noble@apple.com>

        Add support for HTMLMediaElement.fastSeek()
        https://bugs.webkit.org/show_bug.cgi?id=124262

        Reviewed by Eric Carlson.

        Test: media/video-fast-seek.html

        Add the fastSeek() method to HTMLMediaElement, and use fastSeek() in
        the JavaScript media controls.

        Add the new fastSeek() method:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek): Call seekWithTolerance.
        (HTMLMediaElement::seek): Call seekWithTolerance with 0 tolerance.
        (HTMLMediaElement::seekWithTolerance): Renamed from seek().
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Add seekWithTolerance() to MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::seekWithTolerance): Pass to MediaPlayerPrivate.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance): Default implementation which
            calls seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Call seekWithTolerance with 0 tolerance.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): Renamed from seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Take tolerance parameters.

        Use the new fastSeek() method while actively scrubbing.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Add mouse up and down handlers.
        (Controller.prototype.handleTimeUpdate): Only update the timeline when not scrubbing.
        (Controller.prototype.handleTimelineChange): Use fastSeek().
        (Controller.prototype.handleTimelineMouseDown): Start scrubbing.
        (Controller.prototype.handleTimelineMouseUp): Stop scrubbing.

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for scrolling tree classes.
        <https://webkit.org/b/124286>

        Added SCROLLING_STATE_NODE_TYPE_CASTS and used it to replace the
        hand-written toFoo() casts for ScrollingStateNode subclasses.

        Reviewed by Anders Carlsson.

2013-11-13  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Determining if a line is inside of a shape should only happen in one place
        https://bugs.webkit.org/show_bug.cgi?id=121708

        Reviewed by Andreas Kling.

        The ShapeInfo::lineOverlapsShapeBounds() methods now delegate to the Shape object. The
        logic for the Shape overlap test is now the same for ShapeInsideInfo and ShapeOutsideInfo.

        No new tests, this is just a refactoring of existing code.

        * rendering/shapes/Shape.h:
        (WebCore::Shape::lineOverlapsShapeMarginBounds): Apply lineOverlapsLayoutRect() to the shape-margin bounds LayoutRect.
        (WebCore::Shape::lineOverlapsShapePaddingBounds): Apply lineOverlapsLayoutRect() to the shape-padding bounds LayoutRect.
        (WebCore::Shape::lineOverlapsLayoutRect): The common code for checking if a line and a LayoutRect overlap.
        * rendering/shapes/ShapeInsideInfo.h: Use lineOverlapsShapePaddingBounds() for lineOverlapShapeBounds().
        * rendering/shapes/ShapeOutsideInfo.h: Use lineOverlapsShapeMarginBounds() for lineOverlapShapeBounds().

2013-11-13  Jochen Eisinger  <jochen@chromium.org>

        Restrict UserGestureIndicator to main thread
        https://bugs.webkit.org/show_bug.cgi?id=124277

        Reviewed by Andreas Kling.

        Certain classes that interact with UserGestureIndicators, e.g.
        the DOMTimer, can also live on worker threads. Since a
        background thread cannot possible get a user gesture in the
        first place, and to avoid races, we turn a UserGestureIndicator
        on a background thread into a no-op.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::~UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        * dom/UserGestureIndicator.h:

2013-11-13  Antti Koivisto  <antti@apple.com>

        Factor simple line creation loop to function
        https://bugs.webkit.org/show_bug.cgi?id=124279

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Style::Style):
        
            Capture style that affects line layout to a struct.

        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createLineRuns):
        
            Factor the line loop here.

        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-12  Antti Koivisto  <antti@apple.com>

        Support overflow-wrap:break-word on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=124206

        Reviewed by Andreas Kling.

        Pure text documents are rendered with break-word. It is also common in discussion board type sites.
        
        This also makes many <textarea>'s rendered using the simple line path.

        Tests: fast/forms/basic-textareas-quirks-simple-lines.html
               fast/forms/linebox-overflow-in-textarea-padding-simple-lines.html
               fast/forms/negativeLineHeight-simple-lines.html
               fast/forms/textAreaLineHeight-simple-lines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange):
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        
            Invalidate the cached line layout mode on shape-inside style change.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-13  Andreas Kling  <akling@apple.com>

        Turn some not-so-rare ElementRareData bits into Node flags.
        <https://webkit.org/b/124275>

        The following 4 bits seem to be the most commonly set:

        - childrenAffectedByHover()
        - childrenAffectedByFirstChildRules()
        - childrenAffectedByLastChildRules()
        - childrenAffectedByDirectAdjacentRules()

        Turning them into Node flags means we don't have to allocate full
        ElementRareData object in many cases. I also took this opportunity
        to make Node's flag twiddling functions available to subclasses.

        1.38 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Cleanup the build from unused parameters in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124199.

        Reviewed by Csaba Osztrogonác.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
        * dom/Document.cpp:
        (WebCore::Document::scriptedAnimationControllerSetThrottled):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::shouldProhibitLinks):
        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setIsInWindow):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setCaptionsStyleSheetOverride):

2013-11-13  Andreas Kling  <akling@apple.com>

        Refalize CSSCursorImageValue.
        <https://webkit.org/b/124272>

        Make CSSCursorImageValue constructor return a PassRef, and have it
        take the image CSSValue as a PassRef (and store it internally in a
        Ref<CSSValue>.)

        Had to add a Ref version of compareCSSValuePtr() to make this work.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        RenderTableSection: Cell structures don't need allocation padding.
        <https://webkit.org/b/124263>

        The row structure data gets shrunk-to-fit once we get to layout,
        but per-row cell structures get no such luxury. Fortuntely we know
        ahead of time how many cells a row needs to accomodate, so we can
        just use Vector::resizeToFit() instead of Vector::grow().

        1.25 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        Avoid unnecessarily padding the FontDescription families vector.
        <https://webkit.org/b/124267>

        Use a bit of reserveInitialCapacity+uncheckedAppend grease to avoid
        jumping all the way to capacity=16 when a style has more than just
        a single font-family in it.

        130 kB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontFamily::applyValue):

2013-11-13  Andreas Kling  <akling@apple.com>

        Make remaining CSSPrimitiveValue constructors return PassRef.
        <https://webkit.org/b/124270>

        ..and same with the corresponding CSSValuePool functions.

        Reviewed by Antti Koivisto.

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Disable WebCrypto on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=124261

        Rubber-stamped by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage XMLHttpRequestUpload, XSLImportRule, XMLErrors, XML pending callback classes through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124224

        Reviewed by Anders Carlsson.

        Use std::unique_ptr to handle objects of various XML classes that were previously managed by OwnPtr.
        This removes usage of OwnPtr and PassOwnPtr under Source/WebCore/xml/.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::upload):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/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::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-11-12  Brady Eidson  <beidson@apple.com>

        Move basic IDBBackingStoreTransaction operations to IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124244

        Reviewed by Tim Horton (and unofficially Anders Carlsson).

        This patch:
        - Makes IDBBackingStore the owner of an IDBBackingStoreTransaction.
        - Adds the integer transaction ID to IDBBackingStoreTransaction for reference.
        - Removes IDBTransactionBackend’s reliance on IDBBackingStoreTransaction by moving
          necessary methods to IDBServerConnection.
        - Renames the IDBTransactionBackend::backingStoreTransaction() accessor to
          deprecatedBackingStoreTransaction to make it clear it’s on the way out.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::~IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::deprecatedBackingStoreTransaction):
        (WebCore::IDBTransactionBackend::scheduleTask):
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::commit):
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        (WebCore::IDBBackingStoreLevelDB::establishBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::removeBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp:
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::~IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::resetTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBServerConnectionLevelDB::openTransaction):
        (WebCore::IDBServerConnectionLevelDB::beginTransaction):
        (WebCore::IDBServerConnectionLevelDB::commitTransaction):
        (WebCore::IDBServerConnectionLevelDB::resetTransaction):
        (WebCore::IDBServerConnectionLevelDB::rollbackTransaction):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-12  Andy Estes  <aestes@apple.com>

        Fix the Mountain Lion build after r159171.

        * platform/mac/HTMLConverter.mm:
        (_dateForString): +[NSCalendar calendarWithIdentifier:] only exists on
        10.9. Use -[NSCalendar initWithIdentifier:] instead.

2013-11-12  Andy Estes  <aestes@apple.com>

        [Mac] Fix some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=124252

        Reviewed by Mark Rowe.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use CFPropertyListCreateWithData()
        instead of CFPropertyListCreateFromXMLData().
        (WebCore::LegacyWebArchive::rawDataRepresentation): Use
        CFPropertyListWrite() instead of CFPropertyListWriteToStream().
        * platform/mac/HTMLConverter.mm:
        (_dateForString): Rewrite this method in terms of NSDateComponents and
        NSCalendar instead of using CFGregorianDate.

2013-11-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159160, r159161, and r159164.
        http://trac.webkit.org/changeset/159160
        http://trac.webkit.org/changeset/159161
        http://trac.webkit.org/changeset/159164
        https://bugs.webkit.org/show_bug.cgi?id=124253

        Too many errors (make fewer) (Requested by ap on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createAesKeyGenParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keyData):
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Removed.
        * crypto/CryptoKey.h:
        (WebCore::ENUM_CLASS):
        * crypto/CryptoKeyData.h:
        (WebCore::CryptoKeyData::ENUM_CLASS):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Removed.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Removed.
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::asCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Removed.
        * crypto/keys/CryptoKeyDataRSAComponents.h: Removed.
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        * crypto/keys/CryptoKeyRSA.h: Removed.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoKeyRSAMac.cpp: Removed.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Removed.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Make the placed floats tree use LayoutUnit instead of int
        https://bugs.webkit.org/show_bug.cgi?id=124207

        Reviewed by Alexandru Chiculita.

        The dimensions of floats are in LayoutUnits, so it doesn't make sense
        to be converting to ints for use in the placed floats tree.

        Also add missed "explicit" to single argument FloatingObjects
        constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::lowValue):
        (WebCore::ComputeFloatOffsetAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        * rendering/FloatingObjects.h:
        * rendering/RenderFlowThread.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Build fix.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        ifdef out some code on Mountain Lion. Bug 124249 track fixing this.

2013-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorAgentRegistry from InspectorBaseAgent
        https://bugs.webkit.org/show_bug.cgi?id=124190

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgentRegistry.cpp: Added.
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::setFrontend):
        (WebCore::InspectorAgentRegistry::clearFrontend):
        (WebCore::InspectorAgentRegistry::registerInDispatcher):
        (WebCore::InspectorAgentRegistry::discardAgents):
        * inspector/InspectorAgentRegistry.h: Added.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorBaseAgent.cpp: Removed.
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::~InspectorBaseAgentInterface):
        * inspector/InspectorController.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/WorkerInspectorController.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Release build fix.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Include TypedArrayInlines.h

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Move ValueToString out to its own header file to remove duplication
        https://bugs.webkit.org/show_bug.cgi?id=124237

        Reviewed by Alexandru Chiculita.

        The ValueToString struct is used in many places for debugging. Move it
        out to its own header file to remove all the duplicated definitions
        and make it possible for the specializations to be placed in the
        header files with the implementation of the classes they print.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        * platform/LayoutUnit.h:
        * platform/PODInterval.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/ValueToString.h: Added.
        * platform/graphics/FloatPolygon.h:
        * rendering/FloatingObjects.cpp:
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderFlowThread.h:

2013-11-11  David Hyatt  <hyatt@apple.com>

        Make RenderBlockRareData be in a hashtable instead of being a member variable.
        https://bugs.webkit.org/show_bug.cgi?id=124056

        Reviewed by Anders Carlsson.

        Right now RenderBlock has 4 bytes taken up by a m_rareData member that is almost
        never allocated. This is better off in a separate hash, so that RenderBlock can
        get 4 bytes back.
        
        Since RenderBlockFlow's rare data member was recently removed and folded into
        RenderBlock, we need to undo that change and put the rare data member back in
        RenderBlockFlow. RenderBlockFlowRareData inheriting from RenderBlockRareData
        was not a good idea anyway, since RenderBlockFlows also very rarely need the
        RenderBlockRareData members, and were thus paying a heavier cost when the rare
        data was created than was necessary.
 
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::hasRareData):
        (WebCore::getRareData):
        (WebCore::ensureRareData):
        (WebCore::RenderBlock::ensureShapeInsideInfo):
        (WebCore::RenderBlock::shapeInsideInfo):
        (WebCore::RenderBlock::setShapeInsideInfo):
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::setPageLogicalOffset):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMaxMarginBeforeValues):
        (WebCore::RenderBlockFlow::setMaxMarginAfterValues):
        (WebCore::RenderBlockFlow::setMustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::setMustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::mustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::setBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearShouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareBlockFlowData):
        (WebCore::RenderBlockFlow::materializeRareBlockFlowData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::shouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineBreakToAvoidWidow):
        (WebCore::RenderBlockFlow::didBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineGridBox):
        (WebCore::RenderBlockFlow::setLineGridBox):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        (WebCore::RenderBlockFlow::maxPositiveMarginBefore):
        (WebCore::RenderBlockFlow::maxNegativeMarginBefore):
        (WebCore::RenderBlockFlow::maxPositiveMarginAfter):
        (WebCore::RenderBlockFlow::maxNegativeMarginAfter):
        (WebCore::RenderBlockFlow::initMaxMarginValues):
        (WebCore::RenderBlockFlow::hasRareBlockFlowData):
        (WebCore::RenderBlockFlow::rareBlockFlowData):

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        Build GStreamer files on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=124180

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        Include gstreamer files in WinCairo build.

2013-11-12  Brady Eidson  <beidson@apple.com>

        Introduce IDBServerConnection (and start moving things to it).
        https://bugs.webkit.org/show_bug.cgi?id=124193

        Reviewed by Alexey Proskuryakov.

        IDBServerConnection will be a purely asynchronous interface for database connections, transactions, and cursors.
        Its interface will be 100% asynchronous and callback based - Perfect for an IPC divide.
        Eventually none of the IDB<Foo>Backend classes will need IDBBackingStore<Foo> classes at all, 
        and they’ll all use IDBServerConnection directly.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBServerConnection.h: Added.
        (WebCore::IDBServerConnection::~IDBServerConnection):

        Concrete implementation that - for now - wraps an IDBBackingStoreLevelDB:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: Added.
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStore):
        (WebCore::IDBServerConnectionLevelDB::isClosed):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBServerConnectionLevelDB::deleteDatabase):
        (WebCore::IDBServerConnectionLevelDB::close):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h: Added.

        LevelDB created databases get LevelDB server connections:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

        Replace most uses of IDBBackingStore with server connection:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::create):
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::openInternalAsync):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openConnectionInternal):
        (WebCore::IDBDatabaseBackend::deleteDatabaseAsync):
        (WebCore::IDBDatabaseBackend::close):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        (WebCore::IDBDatabaseBackend::serverConnection):

        Change all the operations to access their DatabaseBackend’s server connection instead
        if hanging on to a backing store directly:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleGetOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):
        * Modules/indexeddb/IDBTransactionCoordinator.h:

2013-11-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        * WebCore.vcxproj/WebCore.vcxproj.filters: Correct filter file so that source
        files show up in their proper directories in Visual Studio.

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for ENABLE(VIDEO).
        https://bugs.webkit.org/show_bug.cgi?id=57420

        Reviewed by Martin Robinson.

        * platform/FileSystem.h:
        * platform/graphics/MediaPlayer.cpp:
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        Separated CG code from GStreamer code.

2013-11-12  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix reported build warnings for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123439

        Reviewed by Carlos Garcia Campos.

        There was a void method, that has return value in it's documentation, so I removed it.

        * bindings/gobject/WebKitDOMCustom.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage StorageThread through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124197

        Reviewed by Anders Carlsson.

        New StorageThread objects are crafted through std::make_unique. This removes the need for the static
        StorageThread::create() method but requires that the StorageThread constructor is made public.

        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * storage/StorageSyncManager.h:
        * storage/StorageThread.cpp:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        * storage/StorageTracker.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary PassOwnPtr.h header includes under Source/WebCore/fileapi
        https://bugs.webkit.org/show_bug.cgi?id=124196

        Reviewed by Anders Carlsson.

        PassOwnPtr is not used anywhere under Source/WebCore/fileapi/, so PassOwnPtr.h inclusions can be removed.

        * fileapi/Blob.h:
        * fileapi/FileThread.h:
        * fileapi/FileThreadTask.h:

2013-11-12  Antti Koivisto  <antti@apple.com>

        Text on simple lines sometimes paints one pixel off
        https://bugs.webkit.org/show_bug.cgi?id=124200

        Reviewed by Andreas Kling.

        Test: fast/text/line-runs-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        
            Don't round on run construction time.

        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        
            Instead round when generating rects.

        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        
            Provide the baseline (used by painting) as unrounded FloatPoint.

2013-11-11  Andreas Kling  <akling@apple.com>

        Elements with class names automatically get unique ElementData.
        <https://webkit.org/b/124184>

        We were calling Element::ensureUniqueElementData() for all Elements
        with a non-empty list of class names. Doing that on parser-fresh
        Elements caused us to upgrade them to UniqueElementData despite not
        needing it (ElementData::setClass() is a const function for caching
        the "cooked" class and can be called on ShareableElementData.)

        1.09 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        JSC bindings generator should generate deletable JSC functions
        https://bugs.webkit.org/show_bug.cgi?id=122422

        Reviewed by Geoffrey Garen.

        The JSC functions that the JSC bindings generator generates should be deletable to conform to
        the WebIDL specification, which instructs that the WebIDL operations must be configurable (which
        translates to the JSC functions being deletable).

        The generator will still produce a non-deletable JSC function for operations under almost all
        Web-facing interfaces since they're annotated with the OperationsNotDeletable attribute. The
        exception here is the Node interface that is having the attribute removed, with the provided
        test case testing that all the functions on the Node prototype object are writable, enumerable
        and configurable. This behavior conforms to the WebIDL specification and the behaviors of IE
        and Firefox. Chrome at the moment still provides non-configurable functions.

        Test: fast/dom/webidl-operations-on-node-prototype.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Enforce the non-deletable behavior of the JSC function if either the
        operation's interface is annotated with the OperationsNotDeletable attribute or the operation itself
        is annotated with the NotDeletable attribute.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Update the JSC generator test baselines.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * dom/Node.idl: Remove the OperationsNotDeletable attribute.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBTransaction tasks asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=124183

        Reviewed by Tim Horton.

        This is an almost zero-change in behavior.

        The one thing that is different is that previously, IDBTransactionBackends would synchronously
        run through their entire set of IDBOperation’s without ever returning control to the runloop.

        Now, they start one task and then wait for its completion to schedule the start of the next task.

        Change IDBOperation’s perform() to take a completion handler so it can be asynchronous.
        Add an IDBSynchronousOperation class to handle "Abort" tasks, which never need to perform i/o
        and therefore can be entirely synchronous.
        * Modules/indexeddb/IDBOperation.h:
        (WebCore::IDBSynchronousOperation::~IDBSynchronousOperation):

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::taskTimerFired): Instead of running through the entire set of tasks,
          perform a single task asynchronously. The completion handler for the task will reset the task timer
          to asynchronously start the next task.
        * Modules/indexeddb/IDBTransactionBackend.h:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.

        Update all operations to take completion handlers.
        For now, perform things synchronously like before, calling the completion handler when complete.
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::IDBCursorBackend::CursorIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::perform):
        (WebCore::IDBCursorBackend::CursorIterationOperation::perform):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called when perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeAbortOperation::create):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::GetOperation::create):
        (WebCore::PutOperation::create):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::OpenCursorOperation::create):
        (WebCore::CountOperation::create):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::ClearOperation::create):

2013-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove some unused generated code
        https://bugs.webkit.org/show_bug.cgi?id=124179

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<Element*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124133

        Reviewed by Andreas Kling.

        We need to use toFoo cast function instead of static_cast<>. Though there is toElement(),
        static_cast<Element*> is still being used.

        No new tests, no behavior changes.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::nextTemplate):
        (WebCore::::previousTemplate):

2013-11-11  Anders Carlsson  <andersca@apple.com>

        FrameFilter can just be an std::function instead
        https://bugs.webkit.org/show_bug.cgi?id=124176

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:

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

        REGRESSION (r155660): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
        https://bugs.webkit.org/show_bug.cgi?id=124090

        Reviewed by Beth Dakin.
        
        After r155660 we did fewer layouts, so were left with overlay scrollbars in the
        wrong locations because nothing would update them after RenderLayerBacking
        computed a new offsetFromRenderer.
        
        First part of the fix is to wean positionOverflowControlsLayers() off of
        an absolute offset from the root. Do this by not using Widget::frameRect()
        to position the layers, but instead RenderLayer::rectFor{Horizontal|Vertical}Scrollbar
        which is what we used to position the scrollbars in the first place.
        
        Second part of the fix is to call positionOverflowControlsLayers() from
        RenderLayerBacking::updateGraphicsLayerGeometry() if the offsetFromRenderer
        changed.

        Test: compositing/overflow/overflow-scrollbar-layer-positions.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        * rendering/RenderLayerBacking.h:

2013-11-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] m_isCompositeFontReference is uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=124170

        Reviewed by Tim Horton.

        Initialize value to false, as is done in the other constructors for this data type.

        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): 
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Characters too close together in complex Arabic text
        https://bugs.webkit.org/show_bug.cgi?id=124057

        Reviewed by Darin Adler.

        We weren't updating our total width variable with run's initial
        advance information, leading to widths that were too narrow.

        In addition, while initial advances for runs that aren't the first
        run are accounted for by baking in the initial advances into the
        previous character's advance, the initial advance for the first run
        has to be accounted for in ComplexTextController::offsetForPosition.

        Test: fast/text/complex-grapheme-cluster-with-initial-advance.html
        Test: fast/text/selection-in-initial-advance-region.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Update
        total width variable
        (WebCore::ComplexTextController::offsetOfPosition): Account for
        the first run's initial advance.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBBackingStoreTransaction be RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=124168

        Reviewed by Tim Horton.

        This is necessarily to safely add a fully asynchronous interface into the IDB mechanism.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

2013-11-11  Antti Koivisto  <antti@apple.com>

        End of line whitespace should collapse with white-space:pre-wrap; overflow-wrap:break-word in all cases
        https://bugs.webkit.org/show_bug.cgi?id=124158

        Reviewed by Dave Hyatt.
        
        If a word just fits the line but the following space overflows we fail to collapse whitespaces 
        at the end of the line. This happens because with break-word we end up taking word breaking
        code path that does not have pre-wrap whitespace handling.
        
        This patch makes the behavior consistent and also matches Firefox.

        Test: fast/text/break-word-pre-wrap.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::handleText):
        
            Don't take the word break code path if we are pre-wrap and the current character is space.
            Instead proceed to break the line normally as this is a valid break position.

2013-11-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight shape-outside when its element is selected in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=124071

        Reviewed by Timothy Hatcher.

        Adding code to pass computed shape information (path and bounds) to the Inspector overlay
        canvas, and the code to display it. The code creates a path based on ShapeInfo's computed
        shape. The shape highlight draws whenever an element is highlighted, via selection in
        the Inspector elements view.

        Test: inspector-protocol/model/highlight-shape-outside.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::localPointToRoot): Convert a local point to be relative to the root view.
        (WebCore::appendPathCommandAndPoints): Helper for building a single segment's worth
        of the overall path.
        (WebCore::appendPathSegment): Build a single segment's worth of the overall path.
        (WebCore::buildObjectForShapeOutside): Build an object to pass to the Inspector overlay
        that represents the shape.
        (WebCore::buildObjectForElementInfo): Call buildObjectForShapeOutside and pass the
        resulting object along.
        * inspector/InspectorOverlayPage.js:
        (pathCommand): Draw a single path command.
        (drawPath): Draw the overall path.
        (_drawShapeHighlight): Draw the highlight for the given shapeInfo.
        (drawNodeHighlight): Call _drawShapeHighlight.
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::polygon): Expose the underlying vertex information for a
        PolygonShape.
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::logicalRx): Expose the logical radii for a shape.
        (WebCore::RectangleShape::logicalRy): Ditto.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::computedShapePhysicalBoundingBox): The physical bounds of a
        shape in renderer coordinates.
        (WebCore::ShapeInfo::shapeToRendererPoint): Convert shape coordinates to renderer
        coordinates.
        (WebCore::ShapeInfo::shapeToRendererSize): Ditto.
        (WebCore::ShapeInfo::ShapeInfo):

2013-11-11  Alexey Proskuryakov  <ap@apple.com>

        Support WebCrypto KeyPair interface
        https://bugs.webkit.org/show_bug.cgi?id=124161

        Reviewed by Geoffrey Garen.

        No new tests yet, will be tested once generateKey is implemented for any RSA algorithms.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        Added new files.

        * bindings/js/JSDOMPromise.h: Support returning a key pair via a promise.

        * bindings/js/JSCryptoKeyPairCustom.cpp: Added.
        (WebCore::JSCryptoKeyPair::visitChildren):
        * crypto/CryptoKey.idl:
        CryptoKey wrapper is reachable through KeyPair, but it doesn't have (or need)
        a back pointer.

        * crypto/CryptoKeyPair.cpp: Added.
        (WebCore::CryptoKeyPair::CryptoKeyPair):
        (WebCore::CryptoKeyPair::~CryptoKeyPair):
        * crypto/CryptoKeyPair.h: Added.
        (WebCore::CryptoKeyPair::create):
        (WebCore::CryptoKeyPair::publicKey):
        (WebCore::CryptoKeyPair::privateKey):
        * crypto/CryptoKeyPair.idl: Added.

2013-11-11  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix build after r158967
        https://bugs.webkit.org/show_bug.cgi?id=124160

        Reviewed by Anders Carlsson.

        After r158967, gcc debug builds with "-Werror=type-limits" enabled
        fail. This patch fixes it.

        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt):

2013-11-11  Zan Dobersek  <zdobersek@igalia.com>

        Remove the OperationsNotDeletable attribute from most of the WebIDL interfaces
        https://bugs.webkit.org/show_bug.cgi?id=124151

        Reviewed by Geoffrey Garen.

        The OperationsNotDeletable attribute currently doesn't have any effect, but will soon enforce
        non-configurability of operations on the interface that uses the attribute. Non-configurability
        of operations is the default behavior at the moment, but will be changed to follow the WebIDL
        specification which requires that the operations are configurable (i.e. -- in JSC terms -- deletable).
        IE and Firefox already exhibit this behavior in the majority of cases, while Chrome and Opera don't.

        The attribute remains in use on the Location interface to mimic the Unforgeable attribute which
        also makes operations of an interface non-configurable. Unforgeable attribute will be used instead
        when support for it will be added to the JSC bindings generator.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesis.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/websockets/WebSocket.idl:
        * crypto/CryptoKey.idl:
        * crypto/SubtleCrypto.idl:
        * css/CSSHostRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValueList.idl:
        * css/DOMWindowCSS.idl:
        * css/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/CharacterData.idl:
        * dom/ChildNode.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLVideoElement.idl:
        * html/MediaController.idl:
        * html/RadioNodeList.idl:
        * html/TimeRanges.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/VideoTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Navigator.idl:
        * page/Performance.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResultList.idl:
        * page/WindowBase64.idl:
        * page/WindowTimers.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGCursorElement.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGException.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-11-11  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Regions] Selection focusNode set to the "region" block, instead of the "source" block
        https://bugs.webkit.org/show_bug.cgi?id=120769

        Reviewed by David Hyatt.

        When a point hits a Region block, current positionForPoint algorithm determines its
        position in the DOM and returns either the start or end offset for such block, since
        Region blocks have no children in the DOM.

        It's necessary to map the point into Flow Thread coordinates in order to determine
        the DOM position of the specific element rendered by the Region.

        Top margin, padding and border points should be mapped to the beginning of the Region
        block, while bottom points are mapped to the block end. The Left coordinate its just
        adjusted to fit in the Flow Thread boundaries, since its not affected by the Flow
        direction.

        Besides, when inspecting the Flow Thread blocks looking for the last candidate box,
        the Region originally associated to the point might be taken into account. Only the
        blocks/boxes rendered by the Region are potential candidates.

        Tests: fast/regions/selection/position-for-point-1-vert-lr.html
               fast/regions/selection/position-for-point-1-vert-rl.html
               fast/regions/selection/position-for-point-1.html
               fast/regions/selection/position-for-point-vert-lr.html
               fast/regions/selection/position-for-point-vert-rl.html
               fast/regions/selection/position-for-point.html

        * rendering/RenderBlock.cpp:
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPoint): Added.
        It just redirects the call to the associated RenderNamedFlowFragment instance.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::mapRegionPointIntoFlowThreadCoordinates): Added.
        It performs the coordinates mapping.
        (WebCore::RenderRegion::positionForPoint): Added.
        It determines the corresponding LayoutPoint in the FlowThread the Region
        is associated to, forwarding the call to the RenderBlock class using the
        FlowThread's first child block and such new point.
        * rendering/RenderRegion.h:

2013-11-11  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        [curl] Remove unused includes.
        https://bugs.webkit.org/show_bug.cgi?id=120415

        Reviewed by Csaba Osztrogonác.

        Original patch by 2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        * platform/network/curl/ProxyServerCurl.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:

2013-11-11  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r159027 to make Apple Windows build happy.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::sharedBufferGetBytesAtPosition):

2013-11-11  Andreas Kling  <akling@apple.com>

        Kill InlineFlowBox::rendererLineBoxes().
        <https://webkit.org/b/124141>

        We only ever used this to access the RenderLineBoxList for non-root
        boxes, and those always have a RenderInline renderer.

        Tighten things up by losing the virtual rendererLineBoxes() and
        calling RenderInline::lineBoxes() directly.

        Reviewed by Antti Koivisto.

2013-11-11  Andreas Kling  <akling@apple.com>

        Bring the LineFragmentationData back to RootInlineBox.
        <https://webkit.org/b/124136>

        Now that we have the simple line layout path, almost all the root
        line boxes end up with some kind of fragmentation data, so we might
        as well put the members back on RootInlineBox and avoid the extra
        allocation (and indirection.)

        1.74 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Shrink RenderInline.
        <https://webkit.org/b/124134>

        Move the "always create line boxes" bit from RenderInline up to
        RenderElement. I didn't do this earlier because there were no bits
        free on RenderObject but thanks to RenderElement we now have tons!

        540 kB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Anders Carlsson.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Make childShouldCreateRenderer() take a Node reference
        https://bugs.webkit.org/show_bug.cgi?id=124132

        Reviewed by Andreas Kling.

        The Node passed to childShouldCreateRenderer() is never null.

2013-11-10  Frédéric Wang  <fred.wang@free.fr>

        CSS direction must be reset to ltr on <math> element.
        <https://webkit.org/b/124121>

        Reviewed by Darin Adler.

        Test: mathml/presentation/direction.html

        * css/mathml.css:
        (math): set direction: ltr; on the <math> element.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Reduce the size of RenderBlockFlow by making its rare data inherit from RenderBlockRareData
        https://bugs.webkit.org/show_bug.cgi?id=124124

        Reviewed by Anders Carlsson.

        Reduce RenderBlockFlow by one word.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:

2013-11-10  Antti Koivisto  <antti@apple.com>

        Use start/end instead of textOffset/textLength for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=124130

        Reviewed by Oliver Hunt.
        
        The code reads better this way.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2013-11-10  Antti Koivisto  <antti@apple.com>

        Implement white-space property on simple line layout path
        https://bugs.webkit.org/show_bug.cgi?id=124122

        Reviewed by Andreas Kling.
        
        Support all values of the white-space property and the tab-size property.

        Tests: fast/forms/basic-textareas-simple-lines.html
               fast/text/embed-at-end-of-pre-wrap-line-simple-lines.html
               fast/text/whitespace/pre-wrap-line-test-simple-lines.html
               fast/text/whitespace/pre-wrap-long-word-simple-lines.html
               fast/text/whitespace/pre-wrap-spaces-after-newline-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-10  Sergio Correia  <sergio.correia@openbossa.org>

        Fix EFL build after r159027
        https://bugs.webkit.org/show_bug.cgi?id=124127

        Reviewed by Anders Carlsson.

        No new tests, build fix.

        * page/Settings.in: Add std to numeric_limits, since we don't have
        'using std' directives anymore.

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::computeColumnCountAndWidth):
        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Remove all 'std' using directives from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124125

        Reviewed by Sam Weinig.

        As per the coding style guidelines.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/WorkerThreadableLoader.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::deadCapacity):
        (WebCore::MemoryCache::lruListFor):
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/Chrome.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::intervalClampedToMinimum):
        * page/FocusController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::resizePageRectsKeepingRatio):
        * page/PageGroupLoadDeferrer.cpp:
        * page/Settings.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::solveStepsFunction):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::fractionalTime):
        (WebCore::AnimationBase::getTimeToNextEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        * platform/DateComponents.cpp:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollContents):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::moveThumb):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::getSomeData):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::updateSharedTimer):
        * platform/Timer.cpp:
        (WebCore::TimerHeapLessThanFunction::operator()):
        (WebCore::TimerBase::heapPop):
        (WebCore::TimerBase::nextUnalignedFireInterval):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::portAllowed):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::setRate):
        * platform/audio/AudioResamplerKernel.cpp:
        (WebCore::AudioResamplerKernel::process):
        * platform/audio/Distance.cpp:
        (WebCore::DistanceEffect::gain):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::indexFromElevationAngle):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::calculateDesiredAzimuthIndexAndBlend):
        * platform/audio/Reverb.cpp:
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::process):
        * platform/cf/URLCF.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::makeRGB):
        (WebCore::makeRGBA):
        (WebCore::colorFloatToRGBAByte):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/FloatQuad.cpp:
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::withinEpsilon):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::isZero):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::expand):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::calculateLobes):
        (WebCore::computeSliceSizesFromRadii):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        (WebCore::GraphicsLayerCA::setupAnimation):
        (WebCore::clampedContentsScaleForScale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::getTileIndexRangeForRect):
        (WebCore::TileController::computeTileCoverageRect):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::computeLineBoundsAndAntialiasingModeForText):
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateStdDeviation):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/mac/FontMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::duration):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollPosition):
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController incrementVolume]):
        (timeToString):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::textClone):
        (WebCore::textLatin1MoveInPrimaryContext):
        (WebCore::textLatin1MoveInPriorContext):
        (WebCore::textInChunkOrOutOfRange):
        (WebCore::textOpenLatin1):
        (WebCore::textUTF16MoveInPrimaryContext):
        (WebCore::textUTF16MoveInPriorContext):
        (WebCore::textOpenUTF16):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::encode):
        * platform/text/TextStream.cpp:
        * platform/text/mac/LocaleMac.mm:
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/InlineBox.cpp:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::constrainToLineTopAndBottomIfNeeded):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::paintChild):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns):
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::setCollapsedBottomMargin):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::calculateMinimumPageHeight):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::updateLogicalHeight):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::tryHyphenating):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::adjustBorderBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustBorderBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::applyVisualEffectOverflow):
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateAdjustedInnerBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clampScrollOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::visibleContentRect):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerModelObject.cpp:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::layout):
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        (WebCore::RenderListBox::size):
        (WebCore::RenderListBox::numVisibleItems):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollHeight):
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::computeIntrinsicLogicalWidths):
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderMeter.cpp:
        * rendering/RenderMultiColumnBlock.cpp:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        * rendering/RenderNamedFlowFragment.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::caretMaxOffset):
        * rendering/RenderProgress.cpp:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderRubyBase.cpp:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::computeControlLogicalHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::outerBorderBefore):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::outerBorderStart):
        (WebCore::RenderTable::outerBorderEnd):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        (WebCore::RenderTableCell::logicalWidthFromColumns):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::layout):
        (WebCore::RenderTableCell::setOverrideLogicalContentHeightFromRowHeight):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::alignLeftRightBorderPaintRect):
        (WebCore::RenderTableCell::alignTopBottomBorderPaintRect):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::firstLineBaseline):
        (WebCore::RenderTableSection::removeCachedCollapsedBorders):
        (WebCore::RenderTableSection::setCachedCollapsedBorder):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderWidget.cpp:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::setFontSize):
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/ShadowData.cpp:
        (WebCore::calculateShadowExtent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::localSelectionRect):
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::startTimer):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::simpleDuration):
        (WebCore::SVGSMILElement::repeatingDuration):
        (WebCore::SVGSMILElement::resolveActiveEnd):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::resolveFirstInterval):
        (WebCore::SVGSMILElement::resolveNextInterval):
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::OffsetBuffer::readOutBytes):

2013-11-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Clean up static_cast<> to cast from AccessibilityObject 
        https://bugs.webkit.org/show_bug.cgi?id=124032

        Reviewed by Mario Sanchez Prada.

        ACCESSIBILITY_OBJECT_TYPE_CASTS can support more helpful casting functions.
        So, we need to use them as much as possible. This patch cleans up all static_cast<> in accessibility.

        This patch generates toAccessibilityFoo() in order to replace static_cast<> with it. Below toAccessibilityFoo()
        are generated.

        - toAccessibilityARIAGridRow()
        - toAccessibilityImageMapLink()
        - toAccessibilityListBox()
        - toAccessibilityListBoxOption()
        - toAccessibilityMenuListOption()
        - toAccessibilityMenuListPopup()
        - toAccessibilityScrollbar()
        - toAccessibilitySlider()

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListBoxOption):
        (WebCore::AccessibilityObject::isSliderThumb):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionClearSelection):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::didUpdateActiveOption):

2013-11-10  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests after r158997.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:

2013-11-10  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Consolidate more code into TrackPrivateBaseGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=124020

        Reviewed by Philippe Normand.

        No new tests because this is just refactoring.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer): Don't pass playbin to TrackPrivateBaseGStreamer, and do pass a pointer to "this".
        (WebCore::AudioTrackPrivateGStreamer::disconnect): Clear m_playbin().
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Move labelChanged() and languageChanged() to TrackPrivateBaseGStreamer. Move m_playbin to this class (along with disconnect() to clear it).
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp: Move tag handling, pad and index to TrackPrivateBaseGStreamer.
        (WebCore::textTrackPrivateEventCallback):
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp: Add WebKitTextCombinerPad with "tags" property, set in the same was as input-selector's pads.
        (webkit_text_combiner_pad_init): Initialize tags to 0.
        (webkitTextCombinerPadFinalize): Clear tags.
        (webkitTextCombinerPadGetProperty): Handling "tags" property.
        (webkitTextCombinerPadEvent): Changed to be a pad event function instead of a pad probe, and now intercepts tags and merges them (like input-selector pads do).
        (webkitTextCombinerRequestNewPad): Using WebKitTextCombinerPad instead of just GhostPad.
        (webkit_text_combiner_pad_class_init): Setup WebKitTextCombinerPad.
        * platform/graphics/gstreamer/TextCombinerGStreamer.h: Remove superfluous code.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Use "notify::active" so we don't need a playbin, and immediately check for tags after the constructor.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Remove m_playbin.
        (WebCore::TrackPrivateBaseGStreamer::getTag): Refactored out from notifyTrackOfTagsChanged.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Simplify using m_owner (so we can call labelChanged() and languageChanged() directly), and use getTag() above.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_owner to we can access the owning track, and change some functions to match our needs better.
        (WebCore::TrackPrivateBaseGStreamer::setActive): Add empty default since InbandTextTrackPrivateGStreamer doesn't need this.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Same as AudioTrackPrivateGStreamer.
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        (WebCore::VideoTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same as AudioTrackPrivateGStreamer.

2013-11-10  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for Widget classes.
        <https://webkit.org/b/124120>

        Add a WIDGET_TYPE_CASTS macro and replace all the hand-written
        toFoo() helpers we had for Widget subclasses. Fixed up a handful
        of places that were still using static_cast.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove unused FragmentationDisabler class.
        <https://webkit.org/b/124118>

        This RAII object was added in r144744 to avoid a crash when using
        MathML inside CSS regions. Its only user was removed in r157070.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Simplify some is-this-a-MathML-element? checks.
        <https://webkit.org/b/124119>

        As of r158198, the MathML-ness of an Element is determined by
        a Node flag, so there's no need to cast to Element before checking
        on this. Simplify accordingly.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove RenderTheme::shouldOpenPickerWithF4Key().

        Rubber-stamped by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        CSSValuePool::createFontFamilyValue() should return PassRef.
        <https://webkit.org/b/124114>

        Unlike createFontFaceValue(), createFontFamilyValue() can never
        fail to return an object and thus should return PassRef.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderIFrame should display its name correctly in DRT output.
        <https://webkit.org/b/124117>

        Nuke an age-old FIXME about making RenderIFrame show its true name
        in DRT output. No more "RenderPartObject {IFRAME}"!

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextMetricsBuilder::walkTree() should take a RenderElement.
        <https://webkit.org/b/124105>

        Make walkTree() take a RenderElement so we can use the non-virtual
        firstChild() internally. All call sites had pointers to compatible
        objects already.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderMathMLFenced should pass around operators in tighter types.
        <https://webkit.org/b/124115>

        Store operator renderers in RenderMathMLOperator pointers instead
        of passing them around as RenderObject.

        Reviewed by Martin Robinson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Use RENDER_OBJECT_TYPE_CASTS for more types.
        <https://webkit.org/b/124112>

        Generate toRenderFoo() type casting helpers for these classes:

            - RenderCombineText
            - RenderDetailsMarker
            - RenderListMarker
            - RenderVideo
            - RenderView

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move MathML type checking virtuals to RenderObject.
        <https://webkit.org/b/124111>

        Previously, checking the type of a MathML renderer would require
        that you first check if it's a RenderMathMLBlock, and then casting
        to that type to access the check you really wanted.

        This change moves all the isRenderMathMLFoo() virtual functions
        to RenderObject. I also made sure all the overloads were private
        and marked them OVERRIDE/FINAL as appropriate.

        Finally I replaced all the hand-written casting functions with
        autogenerated ones using RENDER_OBJECT_TYPE_CASTS.

        Reviewed by Anders Carlsson.

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-09  Anders Carlsson  <andersca@apple.com>

        Encode form data using the KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=124107

        Reviewed by Sam Weinig.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        * platform/network/FormData.cpp:
        (WebCore::encodeElement):
        (WebCore::FormData::encode):
        * platform/network/FormData.h:

2013-11-09  Sam Weinig  <sam@webkit.org>

        Modernize CanvasObserverProxy
        https://bugs.webkit.org/show_bug.cgi?id=124106

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.h:

2013-11-09  Patrick Gansterer  <paroga@webkit.org>

        Move RunLoop from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=116606

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-11-09  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGResourcesCycleSolver a bit.
        <https://webkit.org/b/124104>

        Make the SVGResourcesCycleSolver constructor take a RenderElement&
        and a SVGResources&.

        While I was in the neighborhood, also converted one loop to use a
        renderer iterator instead of walking siblings manually.

        Finally used "auto" to clean up some overly wordy loops.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Beat SVGRenderSupport with the RenderElement stick.
        <https://webkit.org/b/124102>

        Tighten up all the SVGRenderSupport helper functions by making them
        take const RenderElements references instead of raw RenderObject
        pointers as much as possible.

        This tunes up a bunch of branchy style() calls.

        The patch looks big but it's mostly mechanical. I just changed the
        signatures and then worked backwards until everything built again.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextLayoutAttributes always has a RenderSVGInlineText.
        <https://webkit.org/b/124101>

        No SVGTextLayoutAttributes object is without a RenderSVGInlineText
        "context" so make context() return a reference.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move BindingSecurity stuff under JSDOMBinding umbrella.
        <https://webkit.org/b/124099>

        We are hitting shouldAllowAccessToDOMWindow() pretty hard on the
        demo here: <http://www.jasondavies.com/maps/rotate/>

        Putting it together with the rest of the JSDOMBinding code takes
        CPU time spent in there from 8.7% to 6.5%. The abstraction was
        only used to support alternate JS engines in the past.

        Reviewed by Antti Koivisto.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBDatabaseBackendInterface and IDBDatabaseBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124088

        Reviewed by Tim Horton.
+
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Removed.

        * Modules/indexeddb/IDBDatabaseBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp.
        * Modules/indexeddb/IDBDatabaseBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndexWriter.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBPendingDeleteCall.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

2013-11-08  Andreas Kling  <akling@apple.com>

        Reindent JSDOMBinding.h (finally.)

        Rubber-stamped by Sam Weinig.

2013-11-08  Sam Weinig  <sam@webkit.org>

        Change collectStyleForPresentationAttribute and related functions to take a MutableStylePropertySet by reference
        https://bugs.webkit.org/show_bug.cgi?id=124096

        Reviewed by Andreas Kling.

        Pass MutableStylePropertySet by reference. It is never null.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement encoding of arrays of objects
        https://bugs.webkit.org/show_bug.cgi?id=124091

        Reviewed by Beth Dakin.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the rest of the members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObjects):
        Call beginArray, then beginArrayElement/endArrayElement for every element and lastly endArray.

2013-11-08  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: RemoteLayerBackingStore partial repaint is broken for the tile cache
        https://bugs.webkit.org/show_bug.cgi?id=123944

        Reviewed by Simon Fraser.

        Ensure that the tile cache retrieves repaint rects from the tile layer,
        not from the tiled backing layer.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::enumerateRectsBeingDrawn):
        Allow the PlatformCALayer to decide how to enumerate rects to paint.

        * WebCore.exp.in:
        * platform/graphics/mac/WebLayer.h:
        Add RepaintRectList, remove some unnecessary WebCore::s.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::collectRectsToPaint):
        Factor collectRectsToPaint out; it just grabs the rects from
        the layer and makes the decision whether to repaint the bounds
        of the dirty region or just the subregions.

        Move calls to collectRectsToPaint() to callers of drawLayerContents(),
        so that TileController can collect rects from the appropriate source
        (the Tile layer) and other layers just continue grabbing them from
        their relevant layers.

        Make sure that the list that comes from collectRectsToPaint() always
        has at least one rect in it (appending the clip bounds if we don't
        want to repaint subregions) so we can simplify logic in drawLayerContents.

        (WebCore::drawLayerContents):
        Remove code to support CompositingCoordinatesBottomUp, as it's only
        used on Windows, so this Mac-specific code doesn't need to support it.

        Simplify logic given that dirtyRects will always be non-empty.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer setNeedsDisplayInRect:]):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        Adopt collectRectsToPaint.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement more KeyedEncoder functionality
        https://bugs.webkit.org/show_bug.cgi?id=124089

        Reviewed by Beth Dakin.

        * bindings/js/SerializedScriptValue.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeConditionalObject):

2013-11-08  Eric Carlson  <eric.carlson@apple.com>

        getCueAsHTML() on an empty cue should return a document fragment
        https://bugs.webkit.org/show_bug.cgi?id=124084

        Reviewed by Darin Adler.

        Test: media/track/track-cue-empty-cue-text.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText): Don't return early when the
            passed an empty string.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        KeyedEncoder should be able to encoder objects
        https://bugs.webkit.org/show_bug.cgi?id=124085

        Reviewed by Sam Weinig.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        Encode the root object.

        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the target.

        * history/HistoryItem.h:
        Add new members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObject):
        Call beginObject, call the functor and then call endObject().

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach CanvasObserver about references
        https://bugs.webkit.org/show_bug.cgi?id=124082

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.cpp:
        * css/CSSCanvasValue.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a KeyedEncoder class in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124079

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Add symbol needed by WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        Add new header file.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        * history/HistoryItem.h:
        Add an encodeBackForwardTree overload that takes a KeyedEncoder object. Encode the version.

        * platform/KeyedCoding.h:
        Add a KeyedEncoder class that just has a single encodeUInt32 member function for now.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124077

        Reviewed by Alexey Proskuryakov.

        The abstraction is no longer needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Removed.

        * Modules/indexeddb/IDBTransactionBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp.
        * Modules/indexeddb/IDBTransactionBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155660): Some Etherpad pages not scrollable with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=124075

        Reviewed by Beth Dakin.
        
        In r155660 I removed some scrollbar-related layouts when scrollbars
        are in overlay mode.
        
        However, ScrollView::updateScrollbars() has a case where we still need
        to do multiple pases, related to its "Never ever try to both gain/lose a
        scrollbar in the same pass" comment. When we avoid making a new scrollbar
        because the other was removed, we need to do another pass to bring the
        correct scrollbar back.

        Can't test overlay scrollbars in tests.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2013-11-08  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside that extends vertically into the margin-box is top-clipped
        https://bugs.webkit.org/show_bug.cgi?id=123769

        Reviewed by Dirk Schulze.

        Remove the assumption that Y coordinates are >= 0 from the RasterShapeIntervals class
        and correct its computeShapeMarginIntervals() method. The computeShapeMarginIntervals()
        method now generates intervals with Y coordinates that begin at the image shape's
        bounds.y - shape-margin, which may be less than 0.

        The RasterShapeIntervals::intervalsAt() method now offsets its Y coordinate parameter
        by the shape-margin. A non-const overload of the method was added to centralize all
        access to m_intervalLists.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-004.html
              fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-005.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::intervalAt): Don't clip X coordinates to 0 since they can extend into the margin-box.
        (WebCore::RasterShapeIntervals::appendInterval): Use the non-const intervalsAt() method.
        (WebCore::RasterShapeIntervals::uniteMarginInterval): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): See above.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals): Added a field for the margin.
        (WebCore::RasterShapeIntervals::intervalsAt): Offset y coordinates by the margin; added a non-const overload.

2013-11-08  Piotr Grad  <p.grad@samsung.com>

        Ended event should work also when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123879

        Reviewed by Eric Carlson.

        According to W3C specification playback is ended also when playback rate is
        negative and position is the earliest possible position.

        Test: media/video-ended-event-negative-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):

2013-11-08  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking for TypeError in RTCPeerConnection object creation
        https://bugs.webkit.org/show_bug.cgi?id=124049

        Reviewed by Eric Carlson.

        If invalid parameters are passed on RTCPeerConnection creation we must throw a TypeError exception.
        According to the spec it requires a Dictionary argument, the RTCConfiguration, which is mandatory.

        Please notice that this patch does not make every tests run as expected,
        RTCPeerConnectionHandlerMock needs to be update to deal with contraints.

        Existing tests were updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCPeerConnectionCustom.cpp: Added.
        (WebCore::JSRTCPeerConnectionConstructor::constructJSRTCPeerConnection):

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        Use references instead of pointers to RenderBlockFlow in FloatingObjects and ComputeFloatOffsetAdapter
        https://bugs.webkit.org/show_bug.cgi?id=124074

        Reviewed by Sam Weinig.

        Just a straightforward conversion from const pointers to const references.

        Also, remove unneeded argument from FloatingObjects constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::FloatingObjects):
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        (WebCore::shapeInfoForFloat):
        (WebCore::::updateOffsetIfNeeded):
        (WebCore::::collectIfNeeded):
        (WebCore::::heightRemaining):
        * rendering/FloatingObjects.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createFloatingObjects):

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach SubframeLoader a bit about references
        https://bugs.webkit.org/show_bug.cgi?id=124076

        Reviewed by Anders Carlsson.

        * html/HTMLAppletElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubframeLoader.h:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Blind Windows build-fix attempt after r158959

        * WebCore.vcxproj/WebCore.vcxproj:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBCursorBackendInterface and IDBCursorBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124068

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackendInterface.h: Removed.

        * Modules/indexeddb/IDBCursorBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp.
        * Modules/indexeddb/IDBCursorBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Sam Weinig  <sam@webkit.org>

        Modernize FrameLoader a bit
        https://bugs.webkit.org/show_bug.cgi?id=124073

        Reviewed by Anders Carlsson.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        Use std::unique_ptrs rather than OwnPtrs.

        * loader/MixedContentChecker.cpp:
        * loader/MixedContentChecker.h:
        Switch to hold a Frame& rather than Frame*.

2013-11-08  Zan Dobersek  <zdobersek@igalia.com>

        Remove code guarded with ENABLE(STREAM)
        https://bugs.webkit.org/show_bug.cgi?id=123667

        Reviewed by Anders Carlsson.

        Remove ENABLE(STREAM)-guarded code. This was added in the effort to provide Stream API support, but
        no port enables the feature and the work on this feature has wound down after the Chromium port forked,
        leaving this code unmaintained.

        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        RenderBlockFlow::nextFloatLogicalBottomBelow should not use ShapeOutsideFloatOffsetMode
        https://bugs.webkit.org/show_bug.cgi?id=123931

        Reviewed by Sam Weinig.

        Rewrite nextFloatLogicalBottomBelow to use the placed floats tree for
        the search and to not need ShapeOutsideFloatOffsetMode anymore. This
        moves almost all of the logic into FloatingObjects, making a small
        reduction in the amount that RenderBlockFlow needs to know about the
        implementation of FloatingObjects.

        In addition, change ComputeFloatOffsetAdapter to take in LayoutUnits
        and roundToInt itself so that all of it's callers can be simplified.

        No new tests, no new behavior.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextShapeLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/FloatingObjects.h:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelowForBlock):
        (WebCore::RenderBlockFlow::getClearDelta):
        * rendering/RenderBlockFlow.h:

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=124064
        Some WebCrypto files are not in correct directories

        Rubber-stamped by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CryptoAlgorithmAesCbcParams.h: Removed.
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKeyAES.cpp: Removed.
        * crypto/CryptoKeyAES.h: Removed.
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/keys/CryptoKeyAES.cpp: Copied from Source/WebCore/crypto/CryptoKeyAES.cpp.
        * crypto/keys/CryptoKeyAES.h: Copied from Source/WebCore/crypto/CryptoKeyAES.h.
        * crypto/mac/CryptoKeyMac.cpp: Copied from Source/WebCore/crypto/CryptoKeyMac.cpp.
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesCbcParams.h.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesKeyGenParams.h.

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        Implement JWK key import for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=124059

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-import-jwk.html
               crypto/subtle/hmac-import-jwk.html
               crypto/subtle/import-jwk.html

        WebCrypto supports multiple key formats - raw, pkcs8, spki, jwk. The design is that
        we'll transform these into parsed KeyData subclasses before passing to algorithms.

        CryptoKeySerialization is a base class for handling all these formats.

        * WebCore.xcodeproj/project.pbxproj: Added new files. Removed CryptoKeyFormat.h.
        
        * bindings/js/JSCryptoKeySerializationJWK.h: Added.
        * bindings/js/JSCryptoKeySerializationJWK.cpp: Added.
        (WebCore::getStringFromJSON): A helper. Note that we can rely on the object being
        a nice freshly parsed JSON, no getters or anything.
        (WebCore::getBooleanFromJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::JSCryptoKeySerializationJWK):
        (WebCore::JSCryptoKeySerializationJWK::~JSCryptoKeySerializationJWK):
        (WebCore::createHMACParameters): A simple helper.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): WebCrypto API is weird,
        you can have algorithm parameters both inside a JWK key and passed as importKey()
        arguments. They need to agree, whatever that means for specific serialization's
        algorithm options (not all necessarily have a 1-1 matching to WebCrypto).
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Take an intersection of usages.
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable): Only extractable if
        both JWK and the caller agree.
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Verify validity of JWK key.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Return an appropriate KeyData
        subclass.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::ENUM_CLASS): Moved CryptoKeyFormat here.
        (WebCore::cryptoKeyFormatFromJSValue): Added a human readable string to an exception.
        (WebCore::JSSubtleCrypto::importKey): Support multiple key formats, not just raw.

        * crypto/CryptoAlgorithm.cpp: (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        Updated signature for importKey to one that makes more sense. Decoding formats all
        the way from a binary blob is not something that CryptoAlgorithm subclasses should
        do, we now pass a KeyData subclass instead.
        Removed exportKey/wrapKey/unwrapKey altogether, because I don't yet know what the
        signatures will be.

        * crypto/CryptoKeyData.h: Added.
        (WebCore::CryptoKeyData::ENUM_CLASS):
        (WebCore::CryptoKeyData::CryptoKeyData):
        (WebCore::CryptoKeyData::~CryptoKeyData):
        (WebCore::CryptoKeyData::format):
        A base class for passing key material to algorithms. Currently, only one type is
        supported, that being OctetSequence for secret keys. Keys for RSA and EC are more
        complicated, and secret/public ones are different too.

        * crypto/CryptoKeyFormat.h: Removed. There are too many key format classes
        confusingly floating around, and this was only needed in one file for parsing.

        * crypto/CryptoKeySerialization.h: Added.
        Base class for handling raw/pkcs8/spki/jwk keys.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        Updated to use CryptoKeyData.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        Updated to use CryptoKeyData.

        * crypto/keys/CryptoKeyDataOctetSequence.cpp: Added.
        (WebCore::CryptoKeyDataOctetSequence::CryptoKeyDataOctetSequence):
        (WebCore::CryptoKeyDataOctetSequence::~CryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataOctetSequence.h: Added.
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeySerializationRaw.cpp: Added.
        (WebCore::CryptoKeySerializationRaw::CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::~CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::reconcileAlgorithm):
        (WebCore::CryptoKeySerializationRaw::reconcileUsages):
        (WebCore::CryptoKeySerializationRaw::reconcileExtractable):
        (WebCore::CryptoKeySerializationRaw::keyData):
        * crypto/keys/CryptoKeySerializationRaw.h: Added.
        Much code to pass around a Vector<char>.

2013-11-08  Mark Lam  <mark.lam@apple.com>

        Move breakpoint (and exception break) functionality into JSC::Debugger.
        https://bugs.webkit.org/show_bug.cgi?id=121796.

        Reviewed by Geoffrey Garen.

        No new tests.

        - In ScriptDebugServer and JSC::Debugger, SourceID and BreakpointID are
          now numeric tokens.

        - JSC::Debugger now tracks user defined breakpoints in a JSC::Breakpoint
          record. Previously, this info is tracked in the ScriptBreakpoint record
          in ScriptDebugServer. The only element of ScriptBreakpoint that is not
          being tracked by JSC::Breakpoint is the ScriptBreakpointAction.
             The ScriptBreakpointAction is still tracked by the ScriptDebugServer
          in a list keyed on the corresponding BreakpointID.
             The ScriptBreakpoint record is now only used as a means of passing
          breakpoint paramaters to the ScriptDebugServer.

        - ScriptDebugServer now no longer accesses the JSC::CallFrame* directly.
          It always goes through the DebuggerCallFrame.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::notifyDoneProcessingDebuggerEvents):
        (WebCore::ScriptDebugServer::needPauseHandling):
        (WebCore::ScriptDebugServer::handleBreakpointHit):
        (WebCore::ScriptDebugServer::handleExceptionInBreakpointCondition):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Added.
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-11-08  László Langó  <lango@inf.u-szeged.hu>

        InspectorConsoleAgent::didFinishXHRLoading ConsoleMessage should include a column number
        https://bugs.webkit.org/show_bug.cgi?id=114316

        Reviewed by Timothy Hatcher.

        InspectorConsoleAgent::didFinishXHRLoading creates a ConsoleMessage with a line number, 
        but it should also include a column number. It looks like ultimately the line number comes from
        JSXMLHttpRequest::send, it should also be possible to get the column number at the time.
        The column number would be needed by the Web Inspector to jump to the proper place in source code 
        to show where the XHR originated from.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::SendFunctor::SendFunctor):
        (WebCore::SendFunctor::column):
        (WebCore::SendFunctor::operator()):
        (WebCore::JSXMLHttpRequest::send):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::setLastSendLineAndColumnNumber):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        Left sidebar on cubic-bezier.com flickers
        https://bugs.webkit.org/show_bug.cgi?id=123128

        Reviewed by Dean Jackson.
        
        The logic that determined whether position:fixed elements outside the viewport
        should be composited was incorrect if the fixed element also had a transform.
        
        layer.calculateLayerBounds() only takes into account painted transforms (since they
        affect layer bounds). So we need to compute the bounds relative to the layer
        itself, then use localToContainerQuad() to map them to document coordinates,
        but only to the RenderView so that we don't hit the page scale transform.

        Tests: compositing/layer-creation/fixed-position-transformed-into-view.html
               compositing/layer-creation/fixed-position-transformed-outside-view.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2013-11-08  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Center of stretched curly bracket not always vertically centered
        https://bugs.webkit.org/show_bug.cgi?id=123715

        Reviewed by Brent Fulgham.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph): Update an assertion and
        handle the case where two glyph pieces abut.
        (WebCore::RenderMathMLOperator::paint): Do not offset the center glyph by y().

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Bring SourceBuffer.append up to the most recent spec.
        https://bugs.webkit.org/show_bug.cgi?id=123377

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-append-failed.html

        Bring the MediaSource append() implementation up to the current spec.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::evictCodedFrames):
        (WebCore::MockSourceBufferPrivate::isFull):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange + 26
        https://bugs.webkit.org/show_bug.cgi?id=124031

        Reviewed by Eric Carlson.

        WTF::bind() causes errors when given a bare id pointer as a parameter,
        when that parameter is casted to a specific NS type pointer (in this
        case, a NSArray*) in order to pass it as a parameter to the bound
        function.

        Instead of passing around bare id pointers, wrap them in RetainPtr<>
        objects before passing them to WTF::bind().

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-08  Antti Koivisto  <antti@apple.com>

        Templated LChar/UChar paths for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=124035

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        
            Use a templated function to check for illegal characters.

        (WebCore::SimpleLineLayout::skipWhitespaces):
        
            Make a template function.

        (WebCore::SimpleLineLayout::textWidth):
        
            Make a template function plus some argument changes.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Template function for creating runs while operating with either LChars or UChar.
            Also simplified line breaking and text width measuring logic.

        (WebCore::SimpleLineLayout::create):
        
            Pick the template.

        * rendering/break_lines.cpp:
        * rendering/break_lines.h:
        
            Move the implementation to the header (except for the table) so we can use the template
            versions directly.

        (WebCore::isBreakableSpace):
        (WebCore::shouldBreakAfter):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):

2013-11-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] <span> elements exposed through ATK when not needed
        https://bugs.webkit.org/show_bug.cgi?id=123885

        Reviewed by Chris Fleizach.

        As per SVN r158195, the way it's decided whether <span> elements
        should be ignored or not has slightly changed, causing that the
        GTK/EFL ports expose them in cases that they should be ignored,
        such as for text elements that neither are focusable (e.g. by
        explicitly setting tabindex) nor have a meaningful accessible name
        suggesting they should be exposed.

        As a result, the flattening that ATK based ports normally do for
        this kind of elements (by folding them into their parents) do not
        work correctly anymore, making two tests to fail:

            platform/gtk/accessibility/spans-paragraphs-and-divs.html
            platform/gtk/accessibility/spans.html

        This patch encapsulates the part of the logic that affects this in
        the computeAccessibilityIsIgnored() method, placing it in a
        new method of AccessibilityObject that we can call from ATK's
        accessibilityPlatformIncludesObject() to ensure we hide those
        <span> elements when they don't fulfill those requirements.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasAttributesRequiredForInclusion):
        New virtual method encapsulating part of the logic from the function
        that computes whether accessibility should be ignored or not.
        * accessibility/AccessibilityObject.h:

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hasAttributesRequiredForInclusion):
        Override of the new method adding additional checks, as extracted from
        the original bits in computeAccessibilityIsIgnored().
        * accessibility/AccessibilityNodeObject.h:

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        Use the newly added function where we had the original code before.

        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Make sure <span> elements are ignored if they are not focusable
        and they don't have a meaningful accessible name.

2013-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMEventTarget.symbols
        https://bugs.webkit.org/show_bug.cgi?id=123990

        Reviewed by Philippe Normand.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to the
        symbols files.

        * bindings/gobject/WebKitDOMEventTarget.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use deprecation guards around deprecated API in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=123899

        Reviewed by Martin Robinson.

        Do not include deprecated API when compiling with
        WEBKIT_DISABLE_DEPRECATED option.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Enhance SQL journal_mode setting code to be less likely to log an error.
        <rdar://problem/15418577> and https://bugs.webkit.org/show_bug.cgi?id=124018

        Reviewed by Anders Carlsson.

        Even though the docs says SQLITE_ROW will always be returned, apparently SQLITE_OK is sometimes returned.
        Change the code to handle that.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Save the statement result value, and accept SQLITE_OK as a non-error condition.

2013-11-07  Brady Eidson  <beidson@apple.com>

        Update an out-dated ASSERT in IconDatabase code.
        <rdar://problem/15171118> and https://bugs.webkit.org/show_bug.cgi?id=124030.

        Reviewed by Andreas Kling.

        With the asynchronous interfaces that have been added and the support for WK2 that has been added, 
        this ASSERT can incorrectly fire if an icon is asked for before database cleanup is allowed.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL): Update an invalid ASSERT.

2013-11-07  Andreas Kling  <akling@apple.com>

        RenderSVGResource helpers should take RenderStyle by const reference.
        <https://webkit.org/b/124029>

        Take const RenderStyle& instead of RenderStyle* in a few more places
        so we can get rid of some ampersands and assertions.

        Reviewed by Anders Carlsson.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Generate toAccessibilityTableRow|Column|Cell to detect bad type casts
        https://bugs.webkit.org/show_bug.cgi?id=123984

        Reviewed by Mario Sanchez Prada.

        As a step to let static_cast<> use TYPE_CASTS_BASE, AccessibilityTableRow|Column|Cell use
        ACCESSIBILITY_OBJECT_TYPE_CASTS which can support more helper functions rather than manual
        static_cast<>. This change will help to detect bad type casts further.

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cellAtIndex):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        REGRESSION (r154375): Image is oriented incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123831

        Reviewed by Antonio Gomes.

        r154375 made that shouldRespectImageOrientation() isn't used by drawImage().
        It causes an image isn't oriented correctly. This patch sets shouldRespectImageOrientation()
        value by default.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):

2013-11-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image shape-outside with vertical gaps is handled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123934

        Reviewed by Andreas Kling.

        RasterShapeIntervals::getExcludedIntervals() was returning an empty
        list when the line overlapped any vertical gap in the image. This short-circuit
        had been mistakenly copied from getIncludedIntervals(), where it makes sense.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-vgap.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Make contents layer borders more visible
        https://bugs.webkit.org/show_bug.cgi?id=124025

        Reviewed by Tim Horton.

        Layer borders for contents layers are impossible to see when the
        contentsLayer has the same bounds as its parent; make the contents
        layer border 4px thick to make it more visible.

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

2013-11-07  Andreas Kling  <akling@apple.com>

        InlineFlowBox always has a RenderBoxModelObject, take advantage.
        <https://webkit.org/b/124024>

        Since InlineFlowBox already has the branch-less renderer() returning
        a RenderBoxModelObject&, avoid using InlineBox::boxModelObject()
        wherever we have a tightly-typed box. One branch disappears from
        every call site.

        Deleted boxModelObject() on InlineFlowBox to prevent new code from
        calling the less efficient function.

        Reviewed by Anders Carlsson.

2013-11-07  Andreas Kling  <akling@apple.com>

        CTTE: Scrolling tree nodes should always have a ScrollingTree&.
        <https://webkit.org/b/124022>

        Let ScrollingTreeNode and subclasses store the backpointer to the
        tree as a ScrollingTree& reference.

        Reviewed by Anders Carlsson.

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Lots of layers get solid color but transparent contents layers now
        https://bugs.webkit.org/show_bug.cgi?id=123537

        Reviewed by Tim Horton.
        
        We call rendererBackgroundColor() to determine the layer's background color,
        but on most elements this returns the transparent color (a valid color).
        This caused us to allocate a contentsLayer, and use the transparent color as its
        backgroundColor, which was wasteful.
        
        Fix by only making a background-color layer if the color is not transparent (zero alpha).
        
        Also avoid making a new contents layer on every color change, and make sure that
        we don't do implicit animations for backgroundColor, and some other properties
        that were omitted by mistake.

        Layer tree dumps don't dump content layers, so no way to test easily.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        DOMTokenList::add can add duplicated values if arguments had duplicated values
        https://bugs.webkit.org/show_bug.cgi?id=123962

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/bd3822ad4ae3fc5d8f89f433a7bf04f697334305

        In case we do element.classList.add('a', 'a') we need to ensure that we do not add the same token twice.
        See http://dom.spec.whatwg.org/#dom-domtokenlist-add

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::add): Make sure filtered tokens are unique among themselves.

2013-11-07  Eric Carlson  <eric.carlson@apple.com>

        Remove npr.org specific hack in HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=123859

        Reviewed by Jer Noble.

        Remove the site specific hack added in r57820, it is no longer necessary.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Remove m_dispatchingCanPlayEvent.
        (HTMLMediaElement::play): Don't special case npr.org.
        * html/HTMLMediaElement.h:

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the 32-bit build. Virtual thunks seem to have different
        symbol names between 32- and 64-bit.
        
        * WebCore.exp.in:

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in HTMLMediaElement::contextDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=123963

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/177999cdb34b707465670f0feff723922939f278

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: -[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:] + 2084 
        https://bugs.webkit.org/show_bug.cgi?id=124012

        Reviewed by Eric Carlson.

        The value of the 'duration' key is a NSConcreteValue wrapping a CMTime, not a NSNumber.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash when submitting form in a document with null encoding
        https://bugs.webkit.org/show_bug.cgi?id=123975

        Reviewed by Alexey Proskuryakov.

        Merge https://chromium.googlesource.com/chromium/blink/+/bba01a7fff09e3053ada96ababac2a6e4261fe5f
        
        The CString object which is passed to normalizeLineEndingsToCRLF() can be
        a null string. It is created in FormDataList::appendString(), and it
        produces a null CString if FormDataList::m_encoding is a null encoding.

        Test: fast/forms/form-submit-in-image-document.html

        * platform/text/LineEnding.cpp:
        (internalNormalizeLineEndingsToCRLF):

2013-11-07  Anders Carlsson  <andersca@apple.com>

        Use std::function for all policy continuation functions
        https://bugs.webkit.org/show_bug.cgi?id=124011

        Reviewed by Sam Weinig.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::clear):
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::clearRequest):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::checkContentPolicy):
        * loader/PolicyChecker.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Use SQLite journal mode WAL (WriteAheadLogging)
        https://bugs.webkit.org/show_bug.cgi?id=124009

        Reviewed by Anders Carlsson.

        WriteAheadLogging journalling is better than the traditional rollback model.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Use a PRAGMA to set journal_mode to WAL.

2013-11-07  Mark Lam  <mark.lam@apple.com>

        Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
        https://bugs.webkit.org/show_bug.cgi?id=123945.

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::sourceID):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::updateCallFrame):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/ScriptDebugListener.h:

2013-11-07  Cidorvan Leite  <cidorvan.leite@openbossa.org>

        Avoid invalid cairo matrix when drawing surfaces too small
        https://bugs.webkit.org/show_bug.cgi?id=123810

        Drawing surfaces too small makes inverse matrix with values too big,
        when this happen, cairo context is not valid anymore and it stops to draw anything.

        Reviewed by Martin Robinson.

        Test: fast/canvas/drawImage-with-small-values.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-07  Antti Koivisto  <antti@apple.com>

        Simple line layout crashes with SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=124002

        Reviewed by Simon Fraser.
        
        Don't use simple line layout for flows using SVG fonts. They crash if kerning is enabled.

        Test: fast/text/svg-font-simple-line-crash.html

        * platform/graphics/Font.h:
        (WebCore::Font::isSVGFont):
        
            Add isSVGFont() so callers don't need to go via primaryFont().

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Disallow SVG fonts.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextRunRenderingContext.h:
        
            Get rid of the abstract textRunNeedsRenderingContext in favor of just testing isSVGFont().

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Allow customization of the contentsScale of TileController tiles
        https://bugs.webkit.org/show_bug.cgi?id=124004

        Reviewed by Tim Horton.

        On some platorms, zooming out on pages with TiledBacking compositing
        layers can cause very high memory use, because the TiledBacking retains
        the original page scale while the zoom is in flight, but can be asked
        to cover a large area.
        
        Make it possible to reduce memory use in this case by allowing RenderLayerCompositor
        to provide an additional scale factor for newly created tiles. Platforms can
        then customize this to create low-res tiles when necessary.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::contentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setScale):
        (WebCore::TileController::createTileLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerCompositor.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed Win build fix after r158855; wrap shapeInfoForFloat() in an ENABLE(CSS_SHAPES) guard.

        * rendering/FloatingObjects.cpp:

2013-11-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        Refactor logical left/right offset for line methods
        https://bugs.webkit.org/show_bug.cgi?id=123898

        Reviewed by David Hyatt.

        Simplify the logical left/right offset for line methods and their
        implementation, including the ComputeFloatOffsetAdapter. This also
        reduces the number of line offset methods in RenderBlock.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::offset): Add a method to return
            the offset instead of using a confusing out parameter.
        (WebCore::::shapeOffset): Method to return the offset modified by the
            shape delta. Moving the computation to this method allowed for
            simplification of the users of ComputeFloatOffsetAdapter.
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat): Added this
            method so that ShapeOutsideFloatOffsetMode isn't needed. Returns the
            offset based on the float margin box.
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat): Ditto.
        (WebCore::FloatingObjects::logicalLeftOffset): This now only returns
            the offset based on the shape's contour.
        (WebCore::FloatingObjects::logicalRightOffset): Ditto.
        (WebCore::::heightRemaining): Rename to properly follow the getter
            naming convention.
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForLine): Update to remove
            use of ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalRightFloatOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalLeftFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::logicalLeftOffsetForPositioningFloat):
            Positioning a float is the only case where the float margin box
            should be used, and also the only case where heightRemaining is
            needed. This handles that case.
        (WebCore::RenderBlockFlow::logicalRightOffsetForPositioningFloat):
            Ditto.
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat): Update to
            use logical(Left|Right)OffsetForPositioningFloatOnLine.
        (WebCore::RenderBlockFlow::logicalLeftFloatOffsetForLine): Update to
            remove use for ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlockFlow::logicalRightFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.h:

2013-11-07  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Removing a content node of a ContentFlow from the DOM will send a 0 nodeId
        https://bugs.webkit.org/show_bug.cgi?id=123577

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-removal.html

        Do not send unregister events for the content nodes of a flow when the element is not part of the DOM
        anymore. We already send an unbind event, so the inspector is already notified that the node was removed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add mock MediaSource classes for testing.
        https://bugs.webkit.org/show_bug.cgi?id=123322

        Reviewed by Eric Carlson.

        Tests: media/media-source/media-source-addsourcebuffer.html
               media/media-source/media-source-append-buffer.html
               media/media-source/media-source-canplaythrough.html
               media/media-source/media-source-closed.html
               media/media-source/media-source-play.html
               media/media-source/media-source-track-enabled.html
               media/media-source/media-source-tracks.html


        Add mock implementation of platform MediaSource classes, allowing ports to test the
        MediaSource API without having a platform implementation.

        The MockMediaSource will support a byteformat defined in MockBox.h: a simple box-style media
        format with an initialization segment containing a number of tracks, followed by a list of
        samples.

        Add a means to insert a new media engine factory at runtime, so the internals object can add
        a MockMediaSourceMediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactorySupport::callRegisterMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):
        * testing/Internals.h:
        * testing/Internals.idl:

        For non-media-source supporting media engines, fail immediately when asked to load a media
        source, so that the MockMediaSourceMediaPlayer will be instantiated as a fall-back:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:
        * Source/WebCore/WebCore.exp.in:

        Update the MediaSource implementation:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers): Add a link to the spec.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::buffered): Ditto.
        (WebCore::SourceBuffer::setTimestampOffset): Ditto.
        (WebCore::SourceBuffer::validateInitializationSegment): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Ditto. Also,
            bring the implementation up to date with part of the spec.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Remove "Predicate" from
            SampleIsRandomAccessPredicate.

        Add utility classes to parse and represent the bytestream supported by the MockMediaSource:
        * platform/mock/mediasource/MockBox.cpp: Added.
        (WebCore::MockBox::MockBox):
        (WebCore::MockBox::peekType):
        (WebCore::MockBox::peekLength):
        (WebCore::MockTrackBox::MockTrackBox):
        (WebCore::MockTrackBox::type):
        (WebCore::MockInitializationBox::MockInitializationBox):
        (WebCore::MockInitializationBox::type):
        (WebCore::MockSampleBox::MockSampleBox):
        (WebCore::MockSampleBox::type):
        * platform/mock/mediasource/MockBox.h: Added.
        (WebCore::MockBox::length):
        (WebCore::MockBox::type):
        (WebCore::MockTrackBox::trackID):
        (WebCore::MockTrackBox::codec):
        (WebCore::MockTrackBox::kind):
        (WebCore::MockInitializationBox::duration):
        (WebCore::MockInitializationBox::tracks):
        (WebCore::MockSampleBox::presentationTimestamp):
        (WebCore::MockSampleBox::decodeTimestamp):
        (WebCore::MockSampleBox::duration):
        (WebCore::MockSampleBox::trackID):
        (WebCore::MockSampleBox::flags):
        (WebCore::MockSampleBox::isSync):

        Add a MediaPlayerPrivate implementation which uses MockMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp: Added.
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):
        (WebCore::MockMediaPlayerMediaSource::create):
        (WebCore::mimeTypeCache):
        (WebCore::MockMediaPlayerMediaSource::getSupportedTypes):
        (WebCore::MockMediaPlayerMediaSource::supportsType):
        (WebCore::MockMediaPlayerMediaSource::MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::~MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::load):
        (WebCore::MockMediaPlayerMediaSource::cancelLoad):
        (WebCore::MockMediaPlayerMediaSource::play):
        (WebCore::MockMediaPlayerMediaSource::pause):
        (WebCore::MockMediaPlayerMediaSource::naturalSize):
        (WebCore::MockMediaPlayerMediaSource::hasVideo):
        (WebCore::MockMediaPlayerMediaSource::hasAudio):
        (WebCore::MockMediaPlayerMediaSource::setVisible):
        (WebCore::MockMediaPlayerMediaSource::seeking):
        (WebCore::MockMediaPlayerMediaSource::paused):
        (WebCore::MockMediaPlayerMediaSource::networkState):
        (WebCore::MockMediaPlayerMediaSource::readyState):
        (WebCore::MockMediaPlayerMediaSource::buffered):
        (WebCore::MockMediaPlayerMediaSource::didLoadingProgress):
        (WebCore::MockMediaPlayerMediaSource::setSize):
        (WebCore::MockMediaPlayerMediaSource::paint):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::durationDouble):
        (WebCore::MockMediaPlayerMediaSource::seekDouble):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        (WebCore::MockMediaPlayerMediaSource::updateDuration):
        (WebCore::MockMediaPlayerMediaSource::setReadyState):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h: Added.

        Add a mock implementation of MediaSourcePrivate, which uses MockSourceBuffer:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp: Added.
        (WebCore::MockMediaSourcePrivate::create):
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::addSourceBuffer):
        (WebCore::MockMediaSourcePrivate::removeSourceBuffer):
        (WebCore::MockMediaSourcePrivate::duration):
        (WebCore::MockMediaSourcePrivate::setDuration):
        (WebCore::MockMediaSourcePrivate::markEndOfStream):
        (WebCore::MockMediaSourcePrivate::unmarkEndOfStream):
        (WebCore::MockMediaSourcePrivate::readyState):
        (WebCore::MockMediaSourcePrivate::setReadyState):
        (WebCore::MockMediaSourcePrivate::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MockSourceBufferPrivateHasAudio):
        (WebCore::MockMediaSourcePrivate::hasAudio):
        (WebCore::MockSourceBufferPrivateHasVideo):
        (WebCore::MockMediaSourcePrivate::hasVideo):
        * platform/mock/mediasource/MockMediaSourcePrivate.h: Added.
        (WebCore::MockMediaSourcePrivate::activeSourceBuffers):
        (WebCore::MockMediaSourcePrivate::player):

        Add a mock implementation of SourceBufferPrivate, which uses MockBoxes to parse the
        bytestream provided by SourceBuffer:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Added.
        (WebCore::MockMediaSample::create):
        (WebCore::MockMediaSample::~MockMediaSample):
        (WebCore::MockMediaSample::MockMediaSample):
        (WebCore::MockMediaSample::platformSample):
        (WebCore::MockMediaDescription::create):
        (WebCore::MockMediaDescription::~MockMediaDescription):
        (WebCore::MockMediaDescription::MockMediaDescription):
        (WebCore::MockSourceBufferPrivate::create):
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::~MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::setClient):
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::didReceiveInitializationSegment):
        (WebCore::MockSourceBufferPrivate::didReceiveSample):
        (WebCore::MockSourceBufferPrivate::abort):
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource):
        (WebCore::MockSourceBufferPrivate::readyState):
        (WebCore::MockSourceBufferPrivate::setReadyState):
        (WebCore::MockSourceBufferPrivate::hasVideo):
        (WebCore::MockSourceBufferPrivate::hasAudio):
        * platform/mock/mediasource/MockSourceBufferPrivate.h: Added.

        Create mock implementations of AudioTrackPrivate, VideoTrackPrivate, and TextTrackPrivate
        which wrap the MockTrackBox class:
        * platform/mock/mediasource/MockTracks.cpp: Added.
        * platform/mock/mediasource/MockTracks.h: Added.
        (WebCore::MockAudioTrackPrivate::create):
        (WebCore::MockAudioTrackPrivate::~MockAudioTrackPrivate):
        (WebCore::MockAudioTrackPrivate::id):
        (WebCore::MockAudioTrackPrivate::MockAudioTrackPrivate):
        (WebCore::MockTextTrackPrivate::create):
        (WebCore::MockTextTrackPrivate::~MockTextTrackPrivate):
        (WebCore::MockTextTrackPrivate::id):
        (WebCore::MockTextTrackPrivate::MockTextTrackPrivate):
        (WebCore::MockVideoTrackPrivate::create):
        (WebCore::MockVideoTrackPrivate::~MockVideoTrackPrivate):
        (WebCore::MockVideoTrackPrivate::id):
        (WebCore::MockVideoTrackPrivate::MockVideoTrackPrivate):

2013-11-07  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Changing MediaStreamDescriptor to MediaStreamPrivate
        https://bugs.webkit.org/show_bug.cgi?id=123935

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::ended):
        (WebCore::MediaStream::setEnded):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL):
        (WebCore::MediaStreamRegistry::unregisterURL):
        (WebCore::MediaStreamRegistry::lookupMediaStreamPrivate):
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::toWebMediaStreamPrivate):
        (WebCore::MediaPlayerPrivate::lookupMediaStream):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/MediaStreamPrivate.cpp: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp.
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::addSource):
        (WebCore::MediaStreamPrivate::removeSource):
        (WebCore::MediaStreamPrivate::addRemoteSource):
        (WebCore::MediaStreamPrivate::removeRemoteSource):
        (WebCore::MediaStreamPrivate::addRemoteTrack):
        (WebCore::MediaStreamPrivate::removeRemoteTrack):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::setEnded):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        * platform/mediastream/MediaStreamPrivate.h: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.h.
        (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient):
        (WebCore::MediaStreamPrivate::~MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::client):
        (WebCore::MediaStreamPrivate::setClient):
        (WebCore::MediaStreamPrivate::id):
        (WebCore::MediaStreamPrivate::numberOfAudioSources):
        (WebCore::MediaStreamPrivate::audioSources):
        (WebCore::MediaStreamPrivate::numberOfVideoSources):
        (WebCore::MediaStreamPrivate::videoSources):
        (WebCore::MediaStreamPrivate::numberOfAudioTracks):
        (WebCore::MediaStreamPrivate::audioTracks):
        (WebCore::MediaStreamPrivate::numberOfVideoTracks):
        (WebCore::MediaStreamPrivate::videoTracks):
        (WebCore::MediaStreamPrivate::ended):
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream):
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):
        (WebCore::RTCPeerConnectionHandlerMock::removeStream):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-07  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Glyphs in vertical text tests are rotated 90 degrees clockwise
        https://bugs.webkit.org/show_bug.cgi?id=50619

        Reviewed by Martin Robinson.

        Implemented the OPENTYPE_VERTICAL feature for the GTK+ port. It resolves
        the 90 degrees rotation problem of CJK characters when displaying
        vertical text.

        New tests are not required as the existing tests for vertical text will
        work properly now.

        * GNUmakefile.list.am: Added OpenTypeVerticalData.cpp and
        OpenTypeVerticalData.h to platformgtk_sources.
        * PlatformEfl.cmake: Added OpenTypeVerticalData.cpp.
        * PlatformGTK.cmake: Added OpenTypeVerticalData.cpp.
        * platform/graphics/FontCache.cpp: Originally the HashMap for
        OpenTypeVerticalData was designed with FontFileKey as integer in the
        Chromium port, which was an unique number provided by Skia. Since other
        ports use FontFileKey as string, new generic hash functions had to be
        implemented instead of using the specific ones for integers.
        (WebCore::FontVerticalDataCacheKeyHash::hash): New hash function for
        HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyHash::equal): New function for
        comparing hash indexes in the HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyTraits::emptyValue): New function for
        giving an empty FontFileKey.
        (WebCore::FontVerticalDataCacheKeyTraits::constructDeletedValue): New
        function to create a FontFileKey for deleted values.
        (WebCore::FontVerticalDataCacheKeyTraits::isDeletedValue): New function
        to check if a HashMap entry is available.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Added font
        orientation as a parameter to the FontPlatformData constructor.
        * platform/graphics/freetype/FontPlatformData.h: Added m_orientation to
        store the font orientation and m_horizontalOrientationMatrix to store
        the Cairo matrix for horizontal orientation, which can be restored in
        setOrientation().
        (WebCore::FontPlatformData::FontPlatformData): Added font orientation as
        a parameter.
        (WebCore::FontPlatformData::orientation): Implemented this function
        based on m_orientation.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Added new
        helper function rotateCairoMatrixForVerticalOrientation() to rotate the
        Cairo matrix in case of vertical orientation.
        (WebCore::FontPlatformData::FontPlatformData): Initialized
        m_orientation.
        (WebCore::FontPlatformData::operator=): Added m_orientation and
        m_horizontalOrientationMatrix to the assignment operator.
        (WebCore::FontPlatformData::operator==): Added m_orientation to the
        equal operator.
        (WebCore::FontPlatformData::initializeWithFontFace): Rotated and
        translated fonts if orientation is vertical. Also stored the horizontal
        Cairo matrix.
        (WebCore::FontPlatformData::verticalData): Returned the vertical data
        from the font cache.
        (WebCore::FontPlatformData::openTypeTable): Loaded the font table into
        a shared buffer.
        (WebCore::FontPlatformData::setOrientation): Replaced the scaled font
        data by rotating fonts according to the new orientation.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Set the glyph's height and
        width according to the font orientation. It also sets EM.
        (WebCore::SimpleFontData::platformCreateScaledFontData): Added
        orientation to the FontPlatformData constructor.
        (WebCore::SimpleFontData::platformWidthForGlyph): Returned the glyph's
        width according the orientation.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::CairoGetGlyphWidthAndExtents): Obtained the character advance
        and extents according to the font orientation.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityRenderObject() instead of using static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123986

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityRenderObject(), static_cast<> are being used by many places.
        To use toAccessibilityRenderObject() is more helpful to find bad type cast.

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetElement):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityTable() instead of using manual static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123982

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityTable(), static_cast<> are being used by many places.
        We need to use toAccessibilityTable().

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cell):
        (cellAtIndex):
        (webkitAccessibleTableGetIndexAt):
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-11-07  Andreas Kling  <akling@apple.com>

        Use tighter InlineBox subtypes in some places.
        <https://webkit.org/b/123980>

        RenderLineBreak and RenderBox line box wrappers are always going to
        be InlineElementBox, so codify this with tighter types. Also made
        the various positionLine() functions take tighter reference types.

        All the casting to renderer-appropriate box types happens inside of
        RenderBlockFlow::computeBlockDirectionPositionsForLine() and
        propagates from there.

        Reviewed by Antti Koivisto.

2013-11-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] Video and audio elements are not properly exposed
        https://bugs.webkit.org/show_bug.cgi?id=123894

        Reviewed by Chris Fleizach.

        Expose <audio> and <video> elements with ATK_ROLE_EMBEDDED, so we
        can identify them properly from ATK/AT-SPI based ATs.

        Tests: platform/gtk/accessibility/media-controls-panel-title.html
               platform/efl/accessibility/media-emits-object-replacement.html
               platform/gtk/accessibility/media-emits-object-replacement.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Add the new mapping.

2013-11-07  Laszlo Vidacs  <lac@inf.u-szeged.hu>
        
        Fix crash in BitmapImage::destroyDecodedData()
        https://bugs.webkit.org/show_bug.cgi?id=116494

        Reviewed by Csaba Osztrogonác.

        Merge from https://chromium.googlesource.com/chromium/blink/+/6b6887bf53068f8537908e501fdc7317ad2c6d86

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] CSSParser should reject <track-list> without a <track-size>
        https://bugs.webkit.org/show_bug.cgi?id=118025

        Reviewed by Andreas Kling.

        From Blink r152914 by <jchaffraix@chromium.org>

        Make sure that we parse at least 1 <track-size> inside each
        <track-list>. The old parser code allowed track-lists exclusively
        made of <track-name>. The way it was implemented eases the future
        addition of parsing for the repeat() function.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackList): ASSERT if we don't find any
        <track-size> now that we detect their absence in the parser.

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix handling of 'inherit' and 'initial' for grid lines
        https://bugs.webkit.org/show_bug.cgi?id=115401

        Reviewed by Andreas Kling.

        From Blink r150585 by <jchaffraix@chromium.org>

        Added support for 'inherit' and 'initial' special values to
        grid-auto-{columns|rows} and grid-definition-{columns|rows}.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Resolve 'initial' and 'inherit'.
        * rendering/style/RenderStyle.h: Added initialNamedGrid{Column|Row}Lines().
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData): Initialize m_namedGrid{Column|Row}Lines.

2013-11-07  Andreas Kling  <akling@apple.com>

        Clean up BidiRun a little bit.
        <https://webkit.org/b/123964>

        Make BidiRun's member variables private and add accessors for them.
        In doing so, codify the following:

            - BidiRun always has a corresponding RenderObject.
            - The inline box is never cleared after being set.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        More CSSPrimitiveValue constructors should return PassRef.
        <https://webkit.org/b/123953>

        Make some more CSSPrimitiveValue constructor helpers (that are
        known to never return null) return PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for line boxes and use them.
        <https://webkit.org/b/123976>

        Semi-automatically generate the full set of toFooInlineBox()
        helpers with macros instead of having them (partially) hand-coded.
        Replaced static_casts with the new helpers across the codebase.

        Also made the isFooInlineBox() overrides private since they should
        never be called when the type is already known.

        Reviewed by Antti Koivisto.

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify Attr by removing m_specified member variable and setter
        https://bugs.webkit.org/show_bug.cgi?id=123965

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/597f44ec928e08820574728889adabc6d8ecd746

        m_specified is always true in WebKit so simply return true in Attr::specified().

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource extensions to AudioTrack, VideoTrack, and TextTrack.
        https://bugs.webkit.org/show_bug.cgi?id=123374

        Reviewed by Eric Carlson.

        No tests added; tests will be added when Mock implementations are added in a future patch.

        Add new partial interfaces for added methods on AudioTrack, TextTrack, and VideoTrack:
        * Modules/mediasource/AudioTrackMediaSource.idl: Add read-only sourceBuffer attribute.
        * Modules/mediasource/TextTrackMediaSource.idl: Ditto.
        * Modules/mediasource/VideoTrackMediaSource.idl: Ditto.
        * Modules/mediasource/AudioTrackMediaSource.h:
        (WebCore::AudioTrackMediaSource::sourceBuffer): Added static wrapper around non-static sourceBuffer().
        * Modules/mediasource/TextTrackMediaSource.h:
        (WebCore::TextTrackMediaSource::sourceBuffer): Ditto.
        * Modules/mediasource/VideoTrackMediaSource.h:
        (WebCore::VideoTrackMediaSource::sourceBuffer): Ditto.

        Add support for writable kind & language attributes through a custom setter:
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setKind):
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * html/track/AudioTrack.idl:
        * html/track/TextTrack.idl:
        * html/track/VideoTrack.idl:

        Add setter methods to the implementation classes:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::setLanguage):
        * html/track/TextTrack.h:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::setKind):
        (WebCore::TrackBase::setKindInternal):
        * html/track/TrackBase.h:
        (WebCore::TrackBase::setLanguage):
        (WebCore::TrackBase::sourceBuffer):
        (WebCore::TrackBase::setSourceBuffer):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setKind):
        (WebCore::VideoTrack::setLanguage):
        * html/track/VideoTrack.h:

        Implement the unimplemented portions of MediaSource and SourceBuffer:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::MediaSourceBase):
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::setReadyState):
        (WebCore::MediaSourceBase::attachToElement):
        * Modules/mediasource/MediaSourceBase.h:
        (WebCore::MediaSourceBase::mediaElement):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::videoTracks):
        (WebCore::SourceBuffer::audioTracks):
        (WebCore::SourceBuffer::textTracks):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddAudioTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddVideoTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddTextTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidChangeActiveState):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

        Add new files to the project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        And a smorgasbord of other utility changes:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Pass this when attaching.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Ditto.
        * html/HTMLMediaSource.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::item): Make const.
        * html/track/TextTrackList.h:
        (WebCore::TextTrackList::lastItem): Added.
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::create): Added.
        (WebCore::MockSourceBufferPrivate::trackDidChangeEnabled):

2013-11-06  Vani Hegde  <vani.hegde@samsung.com>

        Applied background color is not retained after typing a characters
        https://bugs.webkit.org/show_bug.cgi?id=117337

        Reviewed by Ryosuke Niwa.

        While deleting a selection, only the inheritable style properties
        applied on the selection were saved.
        Since background color is considered as noninheritable style property,
        on deleting the selection, background color set on it was being lost.
        Hence on typing in new text, it would not have the applied
        background color set.
        Fixed by saving editing preoperties that are already in effect
        on a selection before deleting it.

        Test: editing/style/background-color-retained.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        Modified as to save EditingPropertiesInEffect on a selection before
        deleting it.

2013-11-06  Andreas Kling  <akling@apple.com>

        InlineBox: Make paint() and nodeAtPoint() pure virtuals.
        <https://webkit.org/b/123937>

        ...and move the current implementations to InlineElementBox.
        All subclasses were already overriding these functions so the move
        is completely natural.

        Reviewed by Anders Carlsson.

2013-11-06  Andreas Kling  <akling@apple.com>

        Nothing should return std::unique_ptr<InlineBox>.
        <https://webkit.org/b/123936>

        Made RenderBox, RenderLineBreak and RenderListMarker return tightly
        typed InlineElementBoxes instead.

        Reviewed by Anders Carlsson.

2013-11-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream Letterpress effect
        https://bugs.webkit.org/show_bug.cgi?id=123932

        Reviewed by Sam Weinig.

        Test: platform/iphone-simulator/iphone/getComputedStyle-text-decoration-letterpress.html

        * Configurations/FeatureDefines.xcconfig: Add feature define ENABLE_LETTERPRESS disabled
        by default. We only enable letterpress on iOS.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue): Add support for CSS value -webkit-letterpress.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecoration): Ditto.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextDecoration): Ditto.
        * css/CSSValueKeywords.in: Added CSS value -webkit-letterpress.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::fillVectorWithHorizontalGlyphPositions): Added.
        (WebCore::shouldUseLetterpressEffect): Added.
        (WebCore::showLetterpressedGlyphsWithAdvances): Added.
        (WebCore::showGlyphsWithAdvances): Modified to call showLetterpressedGlyphsWithAdvances()
        to show a letterpressed glyph. I also included additional iOS-specific changes.
        (WebCore::Font::drawGlyphs):
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::TextPaintStyle): 
        (WebCore::computeTextPaintStyle): Modified to compute letterpress effect style.
        (WebCore::updateGraphicsContext): Modified to apply/unapply letterpress effect drawing mode.
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyleConstants.h:

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Sam Weinig.

        Moved Ref.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Cleanup FontMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=123928

        Reviewed by Andy Estes.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Inline the value of variable isVertical as we
        reference it exactly once and its value is sufficiently clear.
        (WebCore::Font::drawGlyphs): Remove default case in switch block so that the compiler
        checks that all cases are covered. Move definition of platformData to the top of the
        function and use it whenever we want to access the platform font data

2013-11-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] We should not allow generateMipMap on compressed textures
        https://bugs.webkit.org/show_bug.cgi?id=123915
        <rdar://problem/15201274>

        Reviewed by Dean Jackson.

        Found by existing conformance/extensions/webgl-compressed-texture-s3tc.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Set compressed flag.
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::generateMipmap): For Apple builds, check state
        of compressed flag and generate appropriate WebGL error if necessary.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture): Set compressed flag to false by default
        (WebCore::WebGLTexture::isCompressed): Added
        (WebCore::WebGLTexture::setCompressed): Added
        * html/canvas/WebGLTexture.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::generateMipmap): Switch implementation to use proper
        glGenerateMipmaps, rather than the glGenerateMipmapsEXT method.

2013-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Changes to CodeGeneratorInspectorStrings.py should rebuild inspector generated files
        https://bugs.webkit.org/show_bug.cgi?id=123925

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:

2013-11-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        Rename region line offset methods
        https://bugs.webkit.org/show_bug.cgi?id=123897

        Reviewed by Sam Weinig.

        Because of the large number of overloads on the line offset methods,
        it is very hard to read code using them, which also makes it harder to
        move them out of RenderBlock. This patch renames the methods that take
        a region as an argument to make it clearer when looking at the code
        how the differ from the ones that don't.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLineInRegion):
        (WebCore::RenderBlock::logicalRightOffsetForLineInRegion):
        (WebCore::RenderBlock::logicalLeftOffsetForLineInRegion):
        (WebCore::RenderBlock::startOffsetForLineInRegion):
        (WebCore::RenderBlock::endOffsetForLineInRegion):
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):

2013-11-06  Antti Koivisto  <antti@apple.com>

        HTMLCollection should use CollectionIndexCache
        https://bugs.webkit.org/show_bug.cgi?id=123906

        Reviewed by Ryosuke Niwa.
        
        More code sharing.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h:
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
            
            Add a mechanism for disabling use of backward traversal.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::collectionCanTraverseBackward):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::nameShouldBeVisibleInDocumentAll):
        (WebCore::firstMatchingChildElement):
        (WebCore::nextMatchingSiblingElement):
        (WebCore::HTMLCollection::firstElement):
        (WebCore::HTMLCollection::traverseForward):
        (WebCore::HTMLCollection::collectionFirst):
        (WebCore::HTMLCollection::collectionLast):
        (WebCore::HTMLCollection::collectionTraverseForward):
        (WebCore::HTMLCollection::collectionTraverseBackward):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionCanTraverseBackward):
        
            Disable use of backward traversal for collections that use custom traversal.

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        Add "id" attribute to TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=123825

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::addTextTrack): Add emptyString() for track id.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::AudioTrack::idChanged): Added, set id.
        * html/track/AudioTrack.h: Move m_id to TrackBase.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::InbandTextTrack::idChanged): Added, set id.
        * html/track/InbandTextTrack.h: Add idChanged().
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Add emptyString() for track id.
        (WebCore::LoadableTextTrack::id): Override to return the track element's id.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem): Add empty string for track id.
        (WebCore::TextTrack::captionMenuAutomaticItem): Add empty string for track id.
        (WebCore::TextTrack::TextTrack): Pass id to TrackBase.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create): Add id parameter.
        * html/track/TextTrack.idl: Add id attribute.
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase): Add m_id.
        * html/track/TrackBase.h: Add id attribute / m_id.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::VideoTrack::idChanged): Added, set id.
        * html/track/VideoTrack.h: Move m_id to TrackBase.
        * platform/graphics/TrackPrivateBase.h: Add idChanged() callback.

2013-11-06  Antti Koivisto  <antti@apple.com>

        Move array position caching out from HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=123895

        Reviewed by Darin Adler.

        This caching complicates the logic but is used by a single subclass
        (HTMLFormControlsCollection) only. The subclass can do the caching itself.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::firstElement):
        
            Renamed from traverseFirstElement.

        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        
            Make cache invalidation virtual so we can clear HTMLTableRowsCollection index cache.

        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        
            Use traverseForwardToOffset instead traverseNextElement. This allows removal of traverseNextElement.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::usesCustomForwardOnlyTraversal):
        
            Renamed the enum and the accessor to be more informative.

        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::customElementAfter):
        
            Renamed from virtualItemAfter.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::findFormAssociatedElement):
        (WebCore::HTMLFormControlsCollection::customElementAfter):
        
            Move the array position caching logic here.

        (WebCore::HTMLFormControlsCollection::invalidateCache):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::customElementAfter):
        * html/HTMLTableRowsCollection.h:

2013-11-06  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [ATK] accessibility/title-ui-element-correctness.html fails
        https://bugs.webkit.org/show_bug.cgi?id=99825

        Reviewed by Mario Sanchez Prada.

        When calling setAtkRelationSetFromCoreObject a new ATK_LABELLED_BY_RELATION
        is added, adding proper label element as a relation. When the document structure
        has been changed and a different label should be linked as a relation, current ATK
        implementation adds it as a next target on relation's target list, while
        WTR/DumpRenderTree implementation takes only first one into account.
        This patch adds a new function removing current relations before adding new ones.

        Covered by existing tests.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (removeAtkRelationFromRelationSetByType):
        (setAtkRelationSetFromCoreObject):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Add ENABLE(TEXT_SELECTION)
        https://bugs.webkit.org/show_bug.cgi?id=123827

        Reviewed by Ryosuke Niwa.

        Add compile-time guard, ENABLE(TEXT_SELECTION), to enable or
        disable selection painting in WebCore (enabled by default).

        On iOS we disable WebCore selection painting and have UIKit
        paint the selection.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        For now, add a ENABLE(TEXT_SELECTION)-guard around an assertion. Added
        a FIXME comment to investigate the callers and either move the assertion
        to the appropriate callers or structure the code such that we can remove
        the assertion.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle): Only compute the selection
        paint style when TEXT_SELECTION is enabled. Otherwise, return a paint
        style identical to the text paint style. Also, substitute nullptr for 0.

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unrevewied Windows build fix after r158736; add InlineElementBox.cpp to the RenderingAllInOne.cpp file.

        * rendering/RenderingAllInOne.cpp:

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix, style() return type is now a reference.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unreviewed 32-bit Mac build fix; use an explicit FloatSize -> IntSize conversion function.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):

2013-11-04  Jer Noble  <jer.noble@apple.com>

        Playing many sounds with HTML5 Audio makes WebKit unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=116145

        Reviewed by Eric Carlson.

        Cache as much information as possible from AVPlayerItem to eliminate unneccesary
        calls into AVFoundation.

        Add WillChange/DidChange functions to handle the results of KVO notifications
        from AVPlayerItem and AVPlayer:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatusDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::durationDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rateDidChange):
        (WebCore::itemKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

        Instruct the HTMLMediaElement to cache the currentTime value for 5 seconds:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime):

        Add and initialize member variables to hold these cached values:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):

        Add a new Notification type which can take (and call) a Function object:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::function):

        Implement queries in terms of the cached values of AVPlayerItem and AVPlayer
        properties:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):

        Invalidate the cached currentTime before calling scheduleTimeUpdate so that the
        correct movieTime is saved in m_clockTimeAtLastUpdateEvent:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::setReadyState):

2013-10-24  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for named grid areas
        https://bugs.webkit.org/show_bug.cgi?id=120045

        Reviewed by Andreas Kling.

        From Blink r155555, r155850 and r155889 by <jchaffraix@chromium.org>

        Added support for named grid areas. Basically a named grid area is
        now a valid grid position. The shorthand parsing of grid-area was
        split from the grid-{row|column} as the rules for expanding are
        slightly different.

        Unknown grid area names are treated as 'auto' as per the
        specification. This means that for those cases we need to trigger
        the auto-placement algorithm.

        Tests: fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html
               fast/css-grid-layout/grid-item-named-grid-area-resolution.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::gridMissingGridPositionValue):
        (WebCore::CSSParser::parseGridItemPositionShorthand):
        (WebCore::CSSParser::parseGridAreaShorthand):
        (WebCore::CSSParser::parseSingleGridAreaLonghand):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustGridItemPosition):
        (WebCore::createGridPosition):
        * css/StyleResolver.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::isNamedGridArea):
        (WebCore::GridPosition::setNamedGridArea):
        (WebCore::GridPosition::namedGridLine):

2013-11-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Audio and Video attachments are not output to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123479

        Reviewed by Mario Sanchez Prada.

        Video and audio elements don't appear as distinct objects in the AX hierarchy,
        nor are they treated as replaceable objects when emitting the text. We should
        treat these characters like attachments, for one. On the Mac platform, we should
        also identify them with special subroles.

        Tests: platform/mac/accessibility/media-emits-object-replacement.html
               platform/mac/accessibility/media-role-descriptions.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isGenericFocusableElement):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):


2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Notify nodes removal to Range/Selection after dispatching blur and mutation event
        https://bugs.webkit.org/show_bug.cgi?id=123880

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/b60576a0560d14f8757e58d55d37b7cefa48a6ac

        In willRemoveChildren in ContainerNode.cpp, call Document::nodeChildrenWillBeRemoved after instead of
        before dispatching mutation events because we need to update ranges created by those mutation event
        listeners. willRemoveChild was fixed in r115686.

        Tests: editing/selection/selection-change-in-blur-event-by-remove-children.html
               editing/selection/selection-change-in-mutation-event-by-remove-children.html
               fast/dom/Range/range-created-during-remove-children.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Fix out-of-date offset in selection range code in range.surroundContents
        https://bugs.webkit.org/show_bug.cgi?id=123871

        Reviewed by Andreas Kling.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        The code in Range::insertNode assumeed that the start offset of the selection range within its container
        doesn't change across a call to insertBefore on the container but this is wrong. This patch recomputes
        the start offset when it is used after the insertBefore call.

        Test: editing/selection/range-surroundContents-with-preceding-node.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-06  Andreas Kling  <akling@apple.com>

        Add InlineElementBox and stop instantiating InlineBox directly.
        <https://webkit.org/b/123882>

        Make the InlineBox constructors protected and add a new class
        called InlineElementBox on top. This is somewhat analogous to the
        split between RenderText and RenderElement, and allows us to make
        renderer() return a far tighter RenderBoxModelObject& instead
        of a RenderObject&.

        Moved over attachLine(), deleteLine() and extractLine() to start
        things off. More things will follow.

        Reviewed by Antti Koivisto.

2013-11-06  Piotr Grad  <p.grad@samsung.com>

        Seek for video doesn't work when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123791

        In MediaPlayerPrivateGStreamer::seek negative playback rate was not taken to account.

        Reviewed by Philippe Normand.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):

2013-11-06  Andreas Kling  <akling@apple.com>

        Reinstate an annoying assertion that I accidentally commented out.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Override label() and language() in Audio and VideoTrackPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=123836

        The tests are currently flakey because we only get the label and language if we get
        tags after the track client is set.

        Reviewed by Philippe Normand.

        No new tests because the tests already exist (this fixes flakeyness).

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Override label() and language() to use m_label and m_language.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Make m_label and m_language protected so they can be used in the functions above.

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderBlockFlow should only expose its line boxes as RootInlineBox.
        <https://webkit.org/b/123878>

        The line boxes attached directly to a RenderBlockFlow are always
        RootInlineBox objects, so call sites should always use the tightly
        typed firstRootBox() and lastRootBox().

        This allows the compiler to devirtualize calls to member functions
        of RootInlineBox that are marked FINAL.

        Reviewed by Antti Koivisto.

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure end < m_runCount in WebCore::BidiRunList<WebCore::BidiRun>::reverseRuns
        https://bugs.webkit.org/show_bug.cgi?id=123863

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/cbaa92c763a37d89eeabd01658e522219299290c

        Test: fast/text/bidi-reverse-runs-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver<Iterator, Run>::createBidiRunsForLine): Don't reverse the runs if there's
        nothing to be reversed.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Address the review comment after r158724.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Zalan Bujtas  <zalan@apple.com>

        Widget's position change should not initiate layout, only when its size changes.
        https://bugs.webkit.org/show_bug.cgi?id=123860

        Reviewed by Andreas Kling.

        RenderWidgets initiate unnecessary layouts while scrolling when they are embedded to
        overflow:scroll containers. Scroll position change doesn't dirty the render tree
        so it should not trigger layout either.

        Manual test added. Unfortunately we can't test against the number of layouts yet.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Use-after-free in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Andreas Kling.

        Ref the SliderThumbElement since it could go away inside dragFrom.

        Test: fast/forms/range/range-type-change-onchange-2.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Change the order of conditions to avoid computing rendererIsEditable()
        https://bugs.webkit.org/show_bug.cgi?id=123868

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        When we need both Node::renderer() and Node::rendererIsEditable() conditions to be true to perform
        some operation, it is more effective to check for renderer() first, so that if this condition fails
        we can avoid unnecessary computation of rendererIsEditable().

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        simpleUserAgentStyleSheet doesn't have focus ring on anchor element
        https://bugs.webkit.org/show_bug.cgi?id=123867

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/08ecc23c4d80be9969918c4baf0ac83dc6cb6cbd

        * css/CSSDefaultStyleSheets.cpp:

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        valueForBorderRadiusShorthand returns wrong values in some case
        https://bugs.webkit.org/show_bug.cgi?id=123866

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/0933728126f2db06ab8e945efc98bffa2d42af1c

        Because valueForBorderRadiusShorthand misses the followings:
        - showHorizontalBottomRight depends on showHorizontalBottomLeft.
        - showHorizontalTopRight depends on showHorizontalBottomRight (including showHorizontalBottomLeft).

        See also http://dev.w3.org/csswg/css-backgrounds/#the-border-radius

        Test: fast/css/getComputedStyle/getComputedStyle-borderRadius-2.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Protect DOM nodes in IndentOutdentCommand::tryIndentingAsListItem()
        https://bugs.webkit.org/show_bug.cgi?id=123861

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/297442eb539a2b764fdad323de79099a70179186 partially.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Make selectedListItem, previousList, and nextList
        RefPtr since they're are used after calling insertNodeBefore.

2013-11-05  Andreas Kling  <akling@apple.com>

        Apply more unique_ptr to line box management.
        <https://webkit.org/b/123857>

        Make all of the functions that return newly-created line boxes
        return them packed up in std::unique_ptrs.

        There is one exception in RenderBlockLineLayout where the function
        createInlineBoxForRenderer() is inconsistent about the ownership of
        the returned object. This will be addressed by a subsequent patch.

        We now "release" the line boxes into their various home structures,
        so the pointer smartness doesn't go end-to-end just yet.

        Reviewed by Anders Carlsson.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle(x).lineHeight is affected by zooming
        https://bugs.webkit.org/show_bug.cgi?id=123847

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/7957097afbab2899ababd0d9c8acbf6e3eddb870

        Test: fast/css/line-height-zoom-get-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle): Don't round line-height values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeight::applyValue): Use the computed value instead of the used value.

2013-11-05  James Craig  <jcraig@apple.com>

        AX: media controls accessibility needs more work
        https://bugs.webkit.org/show_bug.cgi?id=123749

        Reviewed by Jer Noble.

        Updated some of the control labels/roles to improve accessibility.
          - Volume slider is now keyboard/screenreader accessible.
          - muteButton was a checkbox toggling checked state, now a button that toggles label "mute/unmute"
          - fullscreenButton was a checkbox toggling checked state, now a button that toggles label "display/exit full screen"
          - captionButton was a checkbox, now a popup button that launches the newly accessible menu.
        Subtitles menu is now keyboard/screenreader accessible (uses roaming tabindex).
        Render dump expectations changed because volume slider is now hidden via... 
        ...opacity/size (to make accessible without hover) instead of display:none.

        Updated existing test coverage.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-panel .volume-box:active):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-closed-captions-container .list):
        (audio::-webkit-media-controls-closed-captions-container li:focus):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.buildCaptionMenu):
        (Controller.prototype.focusSiblingCaptionItem):
        (Controller.prototype.handleCaptionItemKeyUp):

2013-11-05  Andreas Kling  <akling@apple.com>

        Move some plugin-specific code from RenderWidget to RenderEmbeddedObject.
        <https://webkit.org/b/123845>

        All RenderWidgets representing plugins will be RenderEmbeddedObjects.
        Move some of the plugin-specific logic to RenderEmbeddedObject since it
        doesn't make sense for all RenderWidgets (frames, embedded documents)
        to care about this.

        Reviewed by Anders Carlsson.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * WebCore.exp.in:

2013-11-05  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: Moving an element while in the DOMNodeRemoved handler will hide it in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=123516

        Reviewed by Timothy Hatcher.

        InspectorInstrumentation::willRemoveDOMNode was actually calling both willRemoveDOMNodeImpl and
        didRemoveDOMNodeImpl, making the DOMAgent unbind the element even if it was still part of the DOM.

        Because of that the DOMAgent was sending two events:
        1. When the element was about to be removed, just before JS "DOMNodeRemoved" was triggered.
        2. When the element was actually removed.

        Note that inspector's event #2 will not know about the node, as it just removed it from the
        internal hashmap, so it will just use a nodeID == 0 for it.

        This patch adds a separate call to InspectorInstrumentation::didRemoveDOMNode, just before the
        element is about to be removed. The InspectorInstrumentation::willRemoveDOMNode call is now only used
        by the DOMDebugger to trigger the DOM breakpoints in the Web Inspector. That feature is not exposed
        in the new Inspector UI, but can be used/tested using the protocol directly.

        Tests: inspector-protocol/dom-debugger/node-removed.html
               inspector-protocol/dom/dom-remove-events.html
               inspector-protocol/dom/remove-multiple-nodes.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):

2013-11-05  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports with GLES.

        * CMakeLists.txt:
        Added OPENGLES2_LIBRARIES and OPENGLES2_INCLUDE_DIR into the includes and
        libraries list.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        platformCALayerDeviceScaleFactor should be const
        https://bugs.webkit.org/show_bug.cgi?id=123842

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDeviceScaleFactor):
        Constify PlatformCALayerClient::platformCALayerDeviceScaleFactor.

2013-11-05  Gavin Barraclough  <barraclough@apple.com>

        Subresource loads should not prevent page throttling
        https://bugs.webkit.org/show_bug.cgi?id=123757

        Reviewed by Alexey Proskuryakov.

        The page-is-loading test for inhibiting process supression is currently
        too conservative, preventing supression of pages with infinitely loading
        resources (commonly XHRs). Instead, just rely on the FrameLoader being
        active (with hysteresis).

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::checkForHTTPStatusCodeError):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/SubresourceLoader.h:
            - remove m_activityAssertion from SubresourceLoader.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        [mac] PDFDocumentImage is too big if PDF has a crop box smaller than the media box
        https://bugs.webkit.org/show_bug.cgi?id=123840
        <rdar://problem/15308765>

        Reviewed by Alexey Proskuryakov.

        Test: fast/images/pdf-as-image-crop-box.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
        Use the crop box when determining the size of the image.

        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Get rid of m_mediaBox, since we don't need it anymore.

        (WebCore::PDFDocumentImage::drawPDFPage):
        PDFKit does the translation by the crop box origin for us;
        if we do it additionally, we'll be painting the wrong part of the image.
        So, don't do the translation here.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Factor index cache for NodeLists and HTMLCollections to a class
        https://bugs.webkit.org/show_bug.cgi?id=123823

        Reviewed by Ryosuke Niwa.

        Implement index cache class that can used by NodeLists and HTMLCollections that currently
        each have implementations of their own.
        
        This patch also implements ChildNodeList and LiveNodeList using CollectionIndexCache.
        HTMLCollection is will be transitioned later.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        
            The client calls to cache to for indexed and size access.

        (WebCore::ChildNodeList::collectionFirst):
        (WebCore::ChildNodeList::collectionLast):
        (WebCore::ChildNodeList::collectionTraverseForward):
        (WebCore::ChildNodeList::collectionTraverseBackward):
        
            Cache calls back to these as needed to do the actual traversal.

        (WebCore::ChildNodeList::invalidateCache):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h: Added.
        
            Templated cache class itself.

        (WebCore::::CollectionIndexCache):
        (WebCore::::nodeCount):
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
        (WebCore::::invalidate):
        * dom/LiveNodeList.cpp:
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForward):
        (WebCore::LiveNodeList::collectionFirst):
        (WebCore::LiveNodeList::collectionLast):
        (WebCore::LiveNodeList::collectionTraverseForward):
        (WebCore::LiveNodeList::collectionTraverseBackward):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):

2013-11-05  Enrica Casucci  <enrica@apple.com>

        Full width semicolon is wrong in vertical text.
        https://bugs.webkit.org/show_bug.cgi?id=123814
        <rdar://problem/15312541>

        Reviewed by Benjamin Poulain.

        The full width semicolon should always be upright.
        Adding it to the list of characters that should
        ignore rotation.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::shouldIgnoreRotation):

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove unused RenderWidget::notifyWidget().

        Rubber-stamped by Anders Carlsson.

2013-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158678.
        http://trac.webkit.org/changeset/158678
        https://bugs.webkit.org/show_bug.cgi?id=123820

        Causes a new debug assertion failure on the Mavericks test
        system. (Requested by bfulgham on #webkit).

        * rendering/mathml/RenderMathMLOperator.cpp:

2013-11-05  Renata Hodovan  <reni@webkit.org>

        ASSERTION FAILED: isHTMLTitleElement(m_titleElement.get()) in WebCore::Document::setTitle
        https://bugs.webkit.org/show_bug.cgi?id=122092

        Reviewed by Darin Adler.

        Remove a bogus assert in Document::setTitle().
        m_titleElement can be either of HTMLTitleElement or SVGTitleElement. The assertion was wrong.
        
        Backported from Blink:
        https://src.chromium.org/viewvc/blink?revision=158620&view=revision

        Test: svg/custom/title-assertion.html

        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):

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

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-05  Daniel Bates  <dabates@apple.com>

        XSSAuditor should catch reflected srcdoc properties even without a <frame> tag injection

        From Blink r160615 by <tsepez@chromium.org>
        https://src.chromium.org/viewvc/blink?view=rev&revision=160615

        Test: http/tests/security/xssAuditor/iframe-srcdoc-property-blocked.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterIframeToken):

2013-11-05  Éva Balázsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Delete maketokenizer.
        https://bugs.webkit.org/show_bug.cgi?id=115155

        Reviewed by Zoltan Herczeg.

        This script was used to generate the old flex based CSS tokenizer. It
        was replaced by a custom tokenizer in r106217 but the script wasn't
        removed. Since there is no mention of it in the original bug nor any
        reference to maketokenizer in our build files, it's probably an
        oversight.

        Merge from blink:
        https://chromium.googlesource.com/chromium/blink/+/2a1c8aaf867f707ccdcd8893446e907e2aa2e1c2

        * css/maketokenizer: Removed.

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Unbreaking GCC builds.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): This inline function is not a template anymore.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Make it compile.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):

2013-11-05  Antti Koivisto  <antti@apple.com>

        HTMLCollection should not be NodeList
        https://bugs.webkit.org/show_bug.cgi?id=123794

        Reviewed by Andreas Kling.

        HTMLCollection and NodeList are unrelated types in DOM yet our HTMLCollection inherits NodeList
        for code sharing reasons. While some code does get shared the types are sufficiently different 
        that this results in lots of unnecessary branches, complexity and general awkwardness. Code sharing 
        can be better achieved by means other than inheritance.
        
        This patch splits HTMLCollection from NodeList by copy-pasting and eliminating resulting redundancies. 
        Sharing comes later.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::~ClassNodeList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::registerNodeList):
        (WebCore::Document::unregisterNodeList):
        (WebCore::Document::registerCollection):
        (WebCore::Document::unregisterCollection):
        (WebCore::Document::ensureCachedCollection):
        
            Add separate functions and map for registering HTMLCollections.

        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::ensureCachedHTMLCollection):
        (WebCore::Element::cachedHTMLCollection):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeList::iterateForPreviousElement):
        (WebCore::LiveNodeList::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::LiveNodeList::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeList::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeList::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeList::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::elementBeforeOrAfterCachedElement):
        
            This code used to live in HTMLCollection.cpp. Copy-paste here and remove all branches not needed for NodeLists.

        (WebCore::LiveNodeList::invalidateCache):
        
            NodeLists have no name caches.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        (WebCore::LiveNodeList::isRootedAtDocument):
        (WebCore::LiveNodeList::type):
        (WebCore::LiveNodeList::invalidateCache):
        (WebCore::LiveNodeList::setCachedElement):
        
            Merge LiveNodeListBase and LiveNodeList.
            Remove fields and code supporting HTMLCollection.

        (WebCore::shouldInvalidateTypeOnAttributeChange):
        
            Move to global scope. This function is used both HTMLCollections and LiveNodeLists.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::~NameNodeList):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/Node.cpp:
        (WebCore::shouldInvalidateNodeListCachesForAttr):
        (WebCore::Document::shouldInvalidateNodeListAndCollectionCaches):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::Node::invalidateNodeListAndCollectionCachesInAncestors):
        (WebCore::NodeListsNodeData::invalidateCaches):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):
        (WebCore::NodeListsNodeData::cachedCollection):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::removeCachedCollection):
        (WebCore::NodeListsNodeData::isEmpty):
        (WebCore::NodeListsNodeData::adoptDocument):
        (WebCore::NodeListsNodeData::namedCollectionKey):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            Add separate cache for HTMLCollections.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::~TagNodeList):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        (WebCore::HTMLTagNodeList::create):
        * html/CollectionType.h:
        
            Remove NodeList types.

        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::HTMLCollection::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::HTMLCollection::isLastItemCloserThanLastOrCachedItem):
        (WebCore::HTMLCollection::isFirstItemCloserThanCachedItem):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::traverseFirstElement):
        (WebCore::HTMLCollection::traverseNextElement):
        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::invalidateIdNameCacheMaps):
        (WebCore::HTMLCollection::namedItem):
        
            Remove NodeList specific branches and functions.
            LiveNodeListBase functions are now HTMLCollection functions.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isRootedAtDocument):
        (WebCore::HTMLCollection::invalidationType):
        (WebCore::HTMLCollection::type):
        (WebCore::HTMLCollection::ownerNode):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::document):
        (WebCore::HTMLCollection::overridesItemAfter):
        (WebCore::HTMLCollection::isElementCacheValid):
        (WebCore::HTMLCollection::cachedElement):
        (WebCore::HTMLCollection::cachedElementOffset):
        (WebCore::HTMLCollection::isLengthCacheValid):
        (WebCore::HTMLCollection::cachedLength):
        (WebCore::HTMLCollection::setLengthCache):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::isItemRefElementsCacheValid):
        (WebCore::HTMLCollection::setItemRefElementsCacheValid):
        (WebCore::HTMLCollection::rootType):
        (WebCore::HTMLCollection::hasNameCache):
        (WebCore::HTMLCollection::setHasNameCache):
        
            Copy-paste functions and fields from former LiveNodeListBase.

        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::~HTMLNameCollection):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::~RadioNodeList):
        * html/RadioNodeList.h:
        (WebCore::RadioNodeList::create):

2013-11-05  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        [GTK] Add stubs for missing symbols in dom bindings
        https://bugs.webkit.org/show_bug.cgi?id=123663

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Main thread tasks in ThreadableBlobRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=122946

        Reviewed by Darin Adler.

        The new BlobRegistryContext objects don't have to be adopted into OwnPtr and then have OwnPtr's leaked pointer
        passed into the WTF::callOnMainThread call - the pointer to the new heap-allocated object is passed in directly,
        with the object ending up being managed by std::unique_ptr in the designated main thread task.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::registerBlobURLTask):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::registerBlobURLFromTask):
        (WebCore::unregisterBlobURLTask):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):

2013-11-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CSS] Enable css-image-orientation on EFL and GTK ports.
        https://bugs.webkit.org/show_bug.cgi?id=123698

        Reviewed by Beth Dakin.

        r157909 added wrong early return for css-image-orientation. It causes about 20 regressions in layout test
        when enabling css-image-orientation. This fixes those wrong implementation as well as enables it on EFL
        and GTK ports by default.

        Test: fast/css/image-orientation/image-orientation.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderEmbeddedObject shouldn't know about fallback content.
        <https://webkit.org/b/123781>

        Stop caching the presence of fallback (DOM) content in a flag on
        RenderEmbeddedObject and have SubframeLoader fetch it directly from
        HTMLObjectElement instead.

        Also made SubframeLoader::requestObject() take the owner element
        by reference since we don't support owner-less embedded objects.

        Reviewed by Antti Koivisto.

2013-11-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove NATIVE_FULLSCREEN_VIDEO support
        https://bugs.webkit.org/show_bug.cgi?id=123437

        Reviewed by Philippe Normand.

        Removed some dead code as no GStreamer port is using the native
        fullscreen video support.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Removed compilation of deleted files.
        * platform/graphics/MediaPlayer.h: Removed structures related to
        GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Removed
        gst/video/video.h include.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformMedia):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Removed code related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowNix.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: Removed.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        (webkitVideoSinkNew):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Removed code
        related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp: Removed.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.h: Removed.

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove RenderWidget::viewCleared().
        <https://webkit.org/b/123777>

        This was some ancient hand-waving code from the KHTML era.

        It was obviously confused (e.g RenderEmbeddedObject trying to handle
        iframe owners, even though that setup is impossible.)

        Reviewed by Anders Carlsson.

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Split backend Cursors and Transactions into their own files
        https://bugs.webkit.org/show_bug.cgi?id=123789

        Reviewed by Alexey Proskuryakov.

        No new tests (Rename, no change in behavior).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:
        (WebCore::IDBBackingStoreCursorInterface::~IDBBackingStoreCursorInterface):

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Added.
        (WebCore::IDBBackingStoreTransactionInterface::~IDBBackingStoreTransactionInterface):

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::createCursorBackend):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::firstSeek):
        (WebCore::IDBBackingStoreCursorLevelDB::advance):
        (WebCore::IDBBackingStoreCursorLevelDB::continueFunction):
        (WebCore::IDBBackingStoreCursorLevelDB::haveEnteredRange):
        (WebCore::IDBBackingStoreCursorLevelDB::isPastBounds):
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::~IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::compareIndexKeys):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThanOrEqual):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
 
       * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::begin):
        (WebCore::IDBBackingStoreTransactionLevelDB::commit):
        (WebCore::IDBBackingStoreTransactionLevelDB::rollback):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-04  Zalan Bujtas  <zalan@apple.com>

        Do not call setFrameRect on Widget unless its boundaries changed.
        https://bugs.webkit.org/show_bug.cgi?id=123781

        Reviewed by Andreas Kling.

        Call Widget:setFrameRect only when the frame's rect actually changes. It also
        cleans up the related weak reference code a bit.
        
        Covered by existing tests.

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

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/html] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123740

        Reviewed by Darin Adler.

        Removing redundant headers.

        * html/BaseDateAndTimeInputType.cpp:
        * html/ColorInputType.cpp:
        * html/DOMFormData.cpp:
        * html/DOMURL.cpp:
        * html/DateInputType.cpp:
        * html/DateTimeInputType.cpp:
        * html/DateTimeLocalInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.cpp:
        * html/FormController.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAreaElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCollection.cpp:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLLegendElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTemplateElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/HTMLViewSourceDocument.cpp:
        * html/MediaController.cpp:
        * html/MediaKeyEvent.cpp:
        * html/MonthInputType.cpp:
        * html/RangeInputType.cpp:
        * html/StepRange.cpp:
        * html/TextFieldInputType.cpp:
        * html/TimeInputType.cpp:
        * html/WeekInputType.cpp:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasStyle.cpp:
        * html/canvas/OESVertexArrayObject.cpp:
        * html/parser/BackgroundHTMLParser.cpp:
        * html/parser/CSSPreloadScanner.cpp:
        * html/parser/CompactHTMLToken.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLFormattingElementList.cpp:
        * html/parser/HTMLMetaCharsetParser.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLPreloadScanner.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilderSimulator.cpp:
        * html/parser/HTMLViewSourceParser.cpp:
        * html/parser/TextDocumentParser.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/shadow/ContentDistributor.cpp:
        * html/shadow/InsertionPoint.cpp:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/MediaControlsBlackBerry.cpp:
        * html/shadow/MediaControlsGtk.cpp:
        * html/shadow/SliderThumbElement.cpp:
        * html/track/AudioTrack.cpp:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/TextTrack.cpp:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackRegion.cpp:
        * html/track/TrackListBase.cpp:
        * html/track/VideoTrack.cpp:
        * html/track/WebVTTParser.cpp:

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: deleteDatabase() interface should be asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=123787

        Reviewed by Tim Horton.

        No new tests (No behavior change for a tested port).

        deleteDatabase now has no return value, but calls back to a bool function:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Refactor to account for the new async deleteDatabase:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabaseAsync):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Add Modules/indexeddb/leveldb to the WebCore.xcodeproj

        Rubberstamped by Andreas Kling.

        This will make hacking on IDB much easier for Mac developers as they won’t have
        to constantly add and then subtract the leveldb subdirectory.

        The USE(LEVELDB) flag is still disabled so these files won’t actually build by default.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Address review feedback I forgot to commit in r158641

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls):

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Make opening/establishing a database asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=123775

        Reviewed by Andreas Kling.

        No new tests (No behavior change for a tested port).

        * Modules/indexeddb/IDBBackingStoreInterface.h: Add getOrEstablishIDBDatabaseMetadata with a callback,
          removing getIDBDatabaseMetaData, getObjectStores, and createIDBDatabaseMetaData in the process.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata): Adapted from getIDBDatabaseMetaData,
          implement the asynchronous interface in terms of other LevelDB methods, always calling back synchronously.
        (WebCore::IDBBackingStoreLevelDB::createIDBDatabaseMetaData):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::create):
        (WebCore::IDBDatabaseBackendImpl::openInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::didOpenInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls): Broken off to allow didOpenInternalAsync
          to perform open callbacks in the failure case.
        (WebCore::IDBDatabaseBackendImpl::openConnection): Always queue open connection calls, then immediately processPendingCalls.
        (WebCore::IDBDatabaseBackendImpl::openConnectionInternal): Actually perform open connection calls.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:


2013-11-04  Andreas Kling  <akling@apple.com>

        CTTE: RenderFrameBase's widget is always a FrameView.
        <https://webkit.org/b/123771>

        Delete widget() from RenderFrameBase and supplant a childView()
        that returns FrameView*. Strip away unnecessary casts and asserts.

        Reviewed by Antti Koivisto.

2013-11-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Content in region doesn't respect shape-outside after initial layout pass
        <https://webkit.org/b/114829>

        Although we set the size of a shape for shape-outside in RenderBlockFlow::insertFloatingObject based on the
        float's size, the actual height of the float is not always resolved at that point. (Look at cases when the shape
        has percentage based height or percentage based radius.) ShapeInfo::setShapeSize triggers a layout for 0 height
        value, which will be overriden later, when RenderBlockFlow::positionNewFloats sets the actual size of the float (shape).
        Thus it doesn't make sense to set the shape's size in insertFloatingObject and run those extra unnecessary layout passes,
        since it'll be overriden anyways. I moved the shape size setting logic into RenderBlockFlow::positionNewFloats.

        The problem showed up when we had a shape-outside ellipse with percentage based radius, and we inserted the content
        with JavaScript into a region flow. The content has been layed out based on the 0 border radius, and relayout hasn't been
        triggered when it flew into the flow. This change sets the shape size only when we already have the height of the float,
        so the radius(es) can be resolved correctly, thus no unnecessary layout passes will happen and the layout will be correct as well.

        Reviewed by David Hyatt.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-layout-after-initial-layout-pass.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertFloatingObject): Remove setting the size of the shape.
        (WebCore::RenderBlockFlow::positionNewFloats): Set the size of the shape here.

2013-11-04  Samuel White  <samuel_white@apple.com>

        AX: AXShowMenu doesn't always work.
        https://bugs.webkit.org/show_bug.cgi?id=123649

        Reviewed by Chris Fleizach.

        No new tests, the change occurs in a code path that forces the context menu to show which
        locks up DRT if we try to test it (platform menu is shown). The change itself gives the mouse
        event handler a chance to handle our platform mouse event BEFORE the event ends up in the show
        context menu machinery. This is necessary because without it, the element will not become
        focused. Without focus, accessibility shows different/less menu items than a mouse click. The
        end result is that context menus shown via accessibility are consistent with menus shown via click.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenuAt):

2013-11-04  Jeffrey Pfau  <jpfau@apple.com>

        SMIL timers can still fire after the containing document has been torn down
        <https://webkit.org/b/123291>

        Reviewed by Darin Adler.

        Ensure that the timers get paused when the document is preparing to be torn down.

        Test: svg/animations/smil-timers-not-disabled-crash.html

        * dom/Document.cpp:
        (WebCore::Document::dropChildren):
        (WebCore::Document::commonTeardown):
        (WebCore::Document::prepareForDestruction):
        * dom/Document.h:

2013-11-04  Brendan Long  <b.long@cablelabs.com>

        Move duplicate code in TrackPrivate classes to a common base class
        https://bugs.webkit.org/show_bug.cgi?id=123619

        Reviewed by Darin Adler.

        No new tests because this is just refactoring.

        * GNUmakefile.list.am: Add TrackPrivateBase.
        * WebCore.vcxproj/WebCore.vcxproj: Same.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::inbandTrackIndex): Renamed audioTrackIndex() to trackIndex().
        (WebCore::AudioTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemove): Same.
        * html/track/AudioTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::inbandTrackIndex): Renamed textTrackIndex() to trackIndex().
        (WebCore::InbandTextTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::InbandTextTrack::languageChanged): Same.
        (WebCore::InbandTextTrack::willRemove): Same.
        * html/track/InbandTextTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::inbandTrackIndex): Renamed videoTrackIndex() to trackIndex().
        (WebCore::VideoTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemove): Same.
        * html/track/VideoTrack.h: Update TrackPrivateBaseClient function signatures.
        * platform/graphics/AudioTrackPrivate.h: Remove code that was moved to TrackPrivateBase.
        * platform/graphics/InbandTextTrackPrivate.h: Same.
        * platform/graphics/InbandTextTrackPrivateClient.h: Same.
        * platform/graphics/VideoTrackPrivate.h: Same.
        * platform/graphics/TrackPrivateBase.h: Refactored out duplicate code in AudioTrackPrivate, InbandTextTrackPrivate and VideoTrackPrivate.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Renamed textTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Renamed audioTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Renamed videoTrackIndex() to trackIndex90.

2013-11-04  Andreas Kling  <akling@apple.com>

        FrameView destructor is worried about being retained by a renderer.
        <https://webkit.org/b/123763>

        There's no way we can be in ~FrameView() while also being owned by
        a RenderWidget. Remove some overly paranoid code that was making sure
        the renderer didn't have a reference on us.

        Reviewed by Anders Carlsson.

2013-11-04  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r158311): media/media-fragments/TC0054.html and TC0061.html hit assertions
        https://bugs.webkit.org/show_bug.cgi?id=123555

        Reviewed by Darin Adler.

        No new tests, covered by existing tests.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments): Don't add a fragment with empty key or value as
            they will not processed.
        (WebCore::MediaFragmentURIParser::parseNPTFragment): Remove excess whitespace.

2013-11-04  Patrick Gansterer  <paroga@webkit.org>

        Remove code duplications in createFontCustomPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=123706

        Reviewed by Darin Adler.

        Move OpenTypeSanitizer and WOFF handling from the port specific
        implementations in createFontCustomPlatformData() into the only
        caller of this function CachedFont::ensureCustomFontData().
        Also change the parameter passing the SharedBuffer from a
        pointer to a reference since it is never null.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * platform/graphics/blackberry/FontCustomPlatformData.h:
        * platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:

2013-11-04  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing MediaStreamDescriptor addSource and addTrack methods
        https://bugs.webkit.org/show_bug.cgi?id=123755

        Reviewed by Eric Carlson.

        We must store the track and source that is passed as parameter in a RefPtr,
        otherwise we will refer to a null pointer.

        No new tests needed.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource):
        (WebCore::MediaStreamDescriptor::addTrack):

2013-11-04  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayer::playerLayer
        https://bugs.webkit.org/show_bug.cgi?id=123764

        Reviewed by Sam Weinig.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::clone):
        Remove playerLayer(), fold it into clone().

2013-11-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Mail attachments at the start of an email are not output by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123697

        Reviewed by Ryosuke Niwa.

        VoiceOver is expecting that "replaced elements" (attachments in a Mail message in this case) to be
        represented by the replacement character when asking for a stringForRange.

        However, when that replaced element is at the beginning of the document, the logic does not work because
        there is a few code places that will take that first Position and advance it forward, not accounting for replaced elements.
        When using the TextIterator normally, it does account for these, so that's why it's only affecting as at the beginning of the document.

        Also a "replaced element" can be more than just renderer->isReplaced(), hence the externing of the isRendererReplacedElement method
        and using that it in pertinent places.

        Tests: platform/mac/accessibility/object-replacement-with-no-rendered-children-at-node-start.html
               platform/mac/accessibility/object-replacement-with-rendered-children-at-node-start.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::replacedNodeNeedsCharacter):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (nsStringForReplacedNode):
        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        * dom/Range.cpp:
        (WebCore::Range::firstNode):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TextIterator.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        Use RenderAncestorIterator in a couple of places.
        <https://webkit.org/b/123725>

        Take the ancestorsOfType<RenderMoo>() thingy out for a spin.

        Found a bunch of parent chain walking loops that were really just
        looking for the first ancestor renderer of a certain type.
        They were a perfect fit for this pattern:

            if (auto svgRoot = ancestorsOfType<RenderSVGRoot>(renderer).first())
                svgRoot->shakeMoneyMaker();

        Quite a bit clearer than the previous:

            for (auto ancestor = renderer.parent(); ancestor; ancestor = ancestor->parent()) {
                if (ancestor->isSVGRoot())
                    toRenderSVGRoot(ancestor)->makeMoneyShaker();
            }

        Reviewed by Antti Koivisto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a SourceBufferPrivateClient interface for platform -> html communication.
        https://bugs.webkit.org/show_bug.cgi?id=123373

        Reviewed by Eric Carlson.

        To enable communication between SourceBuffer and SourceBufferPrivate without introducing
        layering violations, add a new interface class SourceBufferPrivateInterface from which
        SourceBuffer will inherit.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Set the private's client.
        (WebCore::SourceBuffer::~SourceBuffer): Clear the private's client.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Added stub.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Hinno.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasAudio): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasVideo): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/SourceBufferPrivateClient.h: Added.
        (WebCore::SourceBufferPrivateClient::~SourceBufferPrivateClient): Empty destructor.

2013-11-01  Jer Noble  <jer.noble@apple.com>

        [PluginProxy] Add a setting to disable video plugin proxy support in HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=123621

        Reviewed by Eric Carlson.

        Add a new Setting which will disable the video plugin proxy. Enable support for AVFoundation
        in iOS (which requries fixing a few compile errors resulting from classes and methods which
        are not available on iOS.

        * WebCore.exp.in: Export wkAVAssetResolvedURL.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Make conditional upon
            new isVideoPluginProxyEnabled() setting.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Ditto.
        (WebCore::HTMLVideoElement::attach): Ditto.
        (WebCore::HTMLVideoElement::parseAttribute): Ditto.
        (HTMLVideoElement::setDisplayMode): Ditto.
        * html/HTMLVideoElement.h:
        * page/Settings.cpp:
        (WebCore::Settings::setVideoPluginProxyEnabled): Simple setter.
        * page/Settings.h:
        (WebCore::Settings::isVideoPluginProxyEnabled): Simple getter.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Conditionally add MediaPlayerPrivateIOS and always add
            MediaPlayerPriateAVFoundationObjC.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::deliverNotification): Add default implementation.
        (WebCore::MediaPlayerPrivateInterface::setMediaPlayerProxy): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Use new
            HAS_ and USE_ macros instead of __MAC_OS_MIN_VERNSION_REQUIRED.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasContextRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Use cachedCGColor instead
            of CGColorGetConstantColor.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Use CVPixelBuffer pixel
            format constant instead of QuickDraw constant.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createPixelBuffer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput): Draw to intermediary
            CGImage on iOS.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION(r158561): fast/block/float/float-append-child-crash.html asserting.

        The non-const ancestor iterator was walking siblings, not ancestors.

        Rubber-stamped by Antti Koivisto.

2013-10-31  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Disclaim support for MSE in AVFoundation and QTKit engines
        https://bugs.webkit.org/show_bug.cgi?id=123593

        Reviewed by Eric Carlson.

        Immediately fail if asked to load a Media Source in engines which do not support
        them.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

2013-11-04  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] image valued shape element margin can cause an ASSERT fail
        https://bugs.webkit.org/show_bug.cgi?id=123743

        Reviewed by Andreas Kling.

        When margin-top is specified for a shape's element, the Y coordinates passed
        to RasterShapeIntervals::getExcludedIntervals() may be negative. This is
        because the incoming logical coordinates are relative to the content or
        padding box, depending on the box-sizing property. The RasterShape::getExcludedIntervals()
        method now clips the incoming Y coordinates to the shape's bounds before
        accessing the shape's intervals.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-margin-crash.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-04  Antti Koivisto  <antti@apple.com>

        Make LiveNodeListBase use Elements instead of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=123745

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        (WebCore::Element::lastElementChild):
        
            Switch to correct calls. ElementTraversal::previous and previousChild are no longer equivalent.

        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::previousTemplate):
        
            Fix ElementTraversal::lastWithin and previous. They had no real clients and didn't work correctly.
            With LiveNodeListBase starting to use these they get excellent test coverage.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::isElementCacheValid):
        (WebCore::LiveNodeListBase::cachedElement):
        (WebCore::LiveNodeListBase::cachedElementOffset):
        (WebCore::LiveNodeListBase::setCachedElement):
        
            Make the cache Element based.
            Switch to Elements in all helpers.
            Rename item -> element for clarity.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodePointer::moveToPrevious):
        (WebCore::NodeIterator::updateForNodeRemoval):
        
            This code expected the old inconsistent NodeTraversal::previous behavior where the traversal includes
            the root as the last item. Drop the stayWithin parameter and handle the one case where it is needed here.

        * dom/NodeTraversal.cpp:
        (WebCore::NodeTraversal::last):
        (WebCore::NodeTraversal::deepLastChild):
        * dom/NodeTraversal.h:
        
            Support ElementTraversal::previous/lastWithin.

        (WebCore::NodeTraversal::previous):
        
            This was slightly wrong too.

        * html/HTMLCollection.cpp:
        (WebCore::previousElement):
        (WebCore::lastElement):
        (WebCore::LiveNodeListBase::iterateForPreviousElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeListBase::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeListBase::setCachedElement):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::elementBeforeOrAfterCachedElement):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isEmpty):
        (WebCore::HTMLCollection::hasExactlyOneItem):

2013-11-04  Michael Saboff  <msaboff@apple.com>

        Eliminate HostCall bit from JSC Stack CallerFrame
        https://bugs.webkit.org/show_bug.cgi?id=123642

        Reviewed by Geoffrey Garen.

        Updated JavaScript stack walking as a result of the corresponding changes made in
        JavaScriptCore.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::didExecuteProgram):

2013-11-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Fix support for shape-outside on a float with padding
        https://bugs.webkit.org/show_bug.cgi?id=123590

        Reviewed by Alexandru Chiculita.

        The line top was being improperly converted to the coordinates of the
        shape, causing the shape to be positioned incorrectly when the float
        had padding. This fixes that problem.

        No new tests, covered by updates to existing ones.

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):

2013-11-04  Alexey Proskuryakov  <ap@apple.com>

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-04  Daniel Bates  <dabates@apple.com>

        Revert SetCGFontRenderingMode() build fix for Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=123633

        Reviewed by Darin Adler.

        Reverts <http://trac.webkit.org/changeset/134380>, which
        was a Chromium Mac build fix for <http://trac.webkit.org/changeset/134348>
        (https://bugs.webkit.org/show_bug.cgi?id=101787). Chromium doesn't
        build against top-of-tree WebKit.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-11-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158526.
        http://trac.webkit.org/changeset/158526
        https://bugs.webkit.org/show_bug.cgi?id=123744

        it broke the build (Requested by jessieberlin on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyAES.cpp:
        * crypto/CryptoKeyAES.h:
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):

2013-11-04  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [Texmap] Remove redundant calls in CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=123737

        Reviewed by Noam Rosenthal.

        Removing unused code left after few refactoring patches.

        No new tests. Covered by existing ones.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):

2013-11-04  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue color constructors should return PassRef.
        <https://webkit.org/b/123728>

        Make CSSPrimitiveValue::createColor() and the corresponding
        CSSValuePool helper functions return PassRef<CSSPrimitiveValue>.

        Also made CSSValuePool slightly less stupid when hitting the upper
        size limit on the color value cache: instead of throwing out cache
        and rebuilding it from scratch, just remove one value at random.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Some more RenderChildIterator deployment.
        <https://webkit.org/b/123735>

        Convert another handful of loops to use childrenOfType<RenderFoo>
        iterators, mostly for skipping over uninteresting text renderers.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        LabelsNodeList always is always rooted at a LabelableElement.
        <https://webkit.org/b/123730>

        Tighten up LabelsNodeList by enforcing that it's only rooted to
        a LabelableElement. Also marked the class FINAL and made its
        create() helper return PassRef.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION: RenderStyle is leaked when not creating renderer for display:none
        <https://webkit.org/b/123726>

        Explicitly drop the RenderStyle reference in RenderElement::createFor
        if we decide to not create any renderer.

        Reviewed by Antti Koivisto.

        Test: fast/css/renderstyle-leak-with-display-none.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/dom] Remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123720

        Reviewed by Andreas Kling.

        Removing redundant headers from dom related cpp files.

        * dom/Attr.cpp:
        * dom/CharacterData.cpp:
        * dom/ChildListMutationScope.cpp:
        * dom/ChildNodeList.cpp:
        * dom/ContainerNode.cpp:
        * dom/ContainerNodeAlgorithms.cpp:
        * dom/DOMNamedFlowCollection.cpp:
        * dom/DatasetDOMStringMap.cpp:
        * dom/Document.cpp:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentMarkerController.cpp:
        * dom/DocumentOrderedMap.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/Element.cpp:
        * dom/ElementRareData.cpp:
        * dom/Event.cpp:
        * dom/EventContext.cpp:
        * dom/EventDispatcher.cpp:
        * dom/EventTarget.cpp:
        * dom/ExceptionBase.cpp:
        * dom/FocusEvent.cpp:
        * dom/InlineStyleSheetOwner.cpp:
        * dom/KeyboardEvent.cpp:
        * dom/LiveNodeList.cpp:
        * dom/MessageEvent.cpp:
        * dom/MessagePort.cpp:
        * dom/MouseRelatedEvent.cpp:
        * dom/MutationEvent.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/MutationRecord.cpp:
        * dom/NameNodeList.cpp:
        * dom/NamedFlowCollection.cpp:
        * dom/NamedNodeMap.cpp:
        * dom/Node.cpp:
        * dom/NodeIterator.cpp:
        * dom/NodeTraversal.cpp:
        * dom/PositionIterator.cpp:
        * dom/ProcessingInstruction.cpp:
        * dom/Range.cpp:
        * dom/RegisteredEventListener.cpp:
        * dom/ScopedEventQueue.cpp:
        * dom/ScriptElement.cpp:
        * dom/ScriptRunner.cpp:
        * dom/SelectorQuery.cpp:
        * dom/ShadowRoot.cpp:
        * dom/StyledElement.cpp:
        * dom/TagNodeList.cpp:
        * dom/Text.cpp:
        * dom/TextEvent.cpp:
        * dom/TouchEvent.cpp:
        * dom/TreeScope.cpp:
        * dom/TreeScopeAdopter.cpp:
        * dom/TreeWalker.cpp:
        * dom/UIEvent.cpp:
        * dom/UserActionElementSet.cpp:
        * dom/UserTypingGestureIndicator.cpp:
        * dom/VisitedLinkState.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLAllCollection is always rooted at a Document.
        <https://webkit.org/b/123724>

        Tighten up HTMLAllCollection by making the constructor take a
        Document& instead of a ContainerNode&. Drive-by application of
        FINAL and PassRef also happened.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Make more CSSValue subclass constructors return PassRef.
        <https://webkit.org/b/123731>

        Make the constructor helpers for the following classes return
        PassRef instead of PassRefPtr:

            - CSSFontValue
            - CSSImageSetValue
            - CSSUnicodeRangeValue
            - WebKitCSSArrayFunctionValue
            - WebKitCSSFilterValue
            - WebKitCSSMatFunctionValue
            - WebKitCSSMixFunctionValue
            - WebKitCSSShaderValue
            - WebKitCSSTransformValue

        Reviewed by Antti Koivisto.

2013-11-04  Jozsef Berta  <jberta@inf.u-szeged.hu>

        Buildfix after r158182 for GCC 4.6
        https://bugs.webkit.org/show_bug.cgi?id=123442

        Reviewed by Csaba Osztrogonác.

        Added explicit "friend class", because  GCC 4.6 doesn't support extended friend declaration (c++11)

        * dom/ScopedEventQueue.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLTableRowsCollection is always rooted at a HTMLTableElement.
        <https://webkit.org/b/123721>

        Tighten up HTMLTableRowsCollection by making the create() helper
        take a HTMLTableElement& and adding a HTMLSelectElement& getter.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLNameCollection and friends are always rooted at a Document.
        <https://webkit.org/b/123722>

        Tighten WindowNameCollection and DocumentNameCollection by making
        their constructors take a Document&, and add a slightly better
        document() than the one we inherit from LiveNodeListBase.

        Also marked the classes FINAL and made create() helpers return
        PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Add an ancestor renderer iterator.
        <https://webkit.org/b/123718>

        Add ancestor iterators for renderers, analogous to element ancestor
        iterators. They walk the chain of parent renderers, stopping at each
        ancestor of a certain type.

        Just like child renderer iterators, this requires isRendererOfType()
        to be implemented for the targeted renderer class.

        You use them like this:

        auto frameSets = ancestorsOfType<RenderFrameSet>(*this);
        for (auto frameSet = frameSets.begin(), end = frameSets.end(); frameSet != end; ++frameSet)
            frameSet->thisOrThat();

        To complete the patch, I put them to use in a couple of random places.

        Reviewed by Antti Koivisto.

2013-11-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use auto keyword to clean-up for loops
        https://bugs.webkit.org/show_bug.cgi?id=123699

        Reviewed by Anders Carlsson.

        Start using auto keyword for loops.
        Also, since region breaks (forced breaks) can be added only on boxes,
        i changed RenderFlowThread::addForcedRegionBreak to use a RenderBox* instead of RenderObject*.

        No change in functionality, no new tests.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        (WebCore::FlowThreadController::styleDidChange):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads):
        (WebCore::FlowThreadController::updateFlowThreadsChainIfNecessary):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingLayout):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingTwoStepLayout):
        (WebCore::FlowThreadController::resetFlowThreadsWithAutoHeightRegions):
        (WebCore::FlowThreadController::updateFlowThreadsIntoConstrainedPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoOverflowPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoMeasureContentPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoFinalPhase):
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        (WebCore::FlowThreadController::isAutoLogicalHeightRegionsCountConsistent):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        (WebCore::RenderFlowThread::addRegionsVisualEffectOverflow):
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsLayoutOverflow):
        (WebCore::RenderFlowThread::clearRegionsOverflow):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::addRegionToList):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):

2013-11-03  Zan Dobersek  <zdobersek@igalia.com>

        PingLoader objects unnecessarily pass through OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=122942

        Reviewed by Darin Adler.

        There's no need to store new PingLoader objects into an OwnPtr just to leak them out a few lines later
        into an unused variable. New objects are created through a new helper method and then left unmanaged as
        they're guaranteed to destroy themselves when they receive a response of any kind.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage): Call the new createPingLoader method to spawn the PingLoader.
        (WebCore::PingLoader::sendPing): Ditto.
        (WebCore::PingLoader::sendViolationReport): Ditto.
        (WebCore::PingLoader::createPingLoader): A helper method that creates a new PingLoader object
        * loader/PingLoader.h: Declare the new PingLoader::createPingLoader method.

2013-11-03  Andreas Kling  <akling@apple.com>

        HTMLOptionsCollection is always rooted at a HTMLSelectElement.
        <https://webkit.org/b/123719>

        Tighten up HTMLOptionsCollection by making the constructor take
        a HTMLSelectElement& and adding a HTMLSelectElement& getter instead
        of casting all over the place. Removed now-pointless assertions.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        RenderTextFragment: Tighten first-letter logic.
        <https://webkit.org/b/123714>

        Reviewed by Antti Koivisto.

        * editing/TextIterator.cpp:
        (WebCore::firstRenderTextInFirstLetter):

            Use iterator helper to find first RenderText child.

        (WebCore::TextIterator::handleTextNodeFirstLetter):

            Tightening through type inference.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        * rendering/RenderTextFragment.h:

            The first letter renderer is always a RenderBoxModelObject,
            so make the code deal in that instead of RenderObject.

        * rendering/RenderChildIterator.h:
        (WebCore::RenderChildIteratorAdapter::first):
        (WebCore::RenderChildIteratorAdapter::last):

            Remove excess ampersands that were keeping this from building.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue identifier constructors should return PassRef.
        <https://webkit.org/b/123712>

        Make CSSPrimitiveValue::createIdentifier() and the corresponding
        CSSValuePool helper return PassRef<CSSPrimitiveValue>.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        Use RenderChildIterator in two more loops.
        <https://webkit.org/b/123713>

        Switch two more renderer child traversal loops to childrenOfType.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSShadowValue constructor should return PassRef.
        <https://webkit.org/b/123711>

        Make CSSShadowValue::create() return a PassRef since it will never
        return null.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSLineBoxContainValue constructor should return PassRef.
        <https://webkit.org/b/123710>

        Make CSSLineBoxContainValue::create() return a PassRef since it
        will never return null.

        Reviewed by Sam Weinig.

2013-11-03  Antti Koivisto  <antti@apple.com>

        LiveNodeLists should have non-null ContainerNode as root
        https://bugs.webkit.org/show_bug.cgi?id=123709

        Reviewed by Andreas Kling.

        After moving ChildNodeList off from LiveNodeList the root is now always at least a ContainerNode.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        
            Also these move from Node to ContainerNode to make tighter typing work.

2013-11-03  Antti Koivisto  <antti@apple.com>

        Switch createContextualFragment to element iterator
        https://bugs.webkit.org/show_bug.cgi?id=123704

        Reviewed by Andreas Kling.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        
            Use type helpers instead of hasTagName

        * editing/markup.cpp:
        (WebCore::collectElementsToRemoveFromFragment):
        (WebCore::removeElementFromFragmentPreservingChildren):
        (WebCore::createContextualFragment):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        
            Use type helpers instead of hasTagName

        * html/HTMLTagNames.in:
        
            Generate type helpers for <html>.

2013-11-03  Antti Koivisto  <antti@apple.com>

        ChildNodeList should not be LiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=123708

        Reviewed by Sam Weinig.

        ChildNodeList is a poor fit to be a LiveNodeList. It is heavily special-cased. It is also
        the only subtype that returns non-Elements thus preventing tightening.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        
            Support new types.

        * dom/ChildNodeList.cpp:
        (WebCore::EmptyNodeList::~EmptyNodeList):
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::~ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::childFromFirst):
        (WebCore::childFromLast):
        (WebCore::ChildNodeList::nodeBeforeCached):
        (WebCore::ChildNodeList::nodeAfterCached):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::namedItem):
        (WebCore::ChildNodeList::invalidateCache):
        
            Implement the same caching optimizations as LiveNodeList with tighter, less generic code.

        * dom/ChildNodeList.h:
        
            Inherit ChildNodeList directly from NodeList.

            Add new EmptyNodeList type. This is only ever used if NodeList is requested for a non-container node.
            It allows tighter typing in ChildNodeList.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::~LiveNodeListBase):
        (WebCore::LiveNodeList::LiveNodeList):
        
            Remove ChildNodeList specific code and branches.

        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        
            Return EmptyNodeList for non-containers.

        * dom/NodeList.h:
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::isLiveNodeList):
        (WebCore::NodeList::isChildNodeList):
        (WebCore::NodeList::isEmptyNodeList):
        
            For isReachableFromOpaqueRoots.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::removeChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::removeEmptyChildNodeList):
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            EmptyNodeList support.

        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeListBase::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::itemBeforeOrAfterCachedItem):
        
            Remove ChildNodeList specific code and branches.

2013-11-03  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Replace OwnPtr with GDIObject
        https://bugs.webkit.org/show_bug.cgi?id=123670

        Reviewed by Anders Carlsson.

        * page/win/FrameGdiWin.cpp:
        (WebCore::imageFromRect):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::getScaledFontHandle):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        (WebCore::createBrush):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::draw):
        (WebCore::SharedBitmap::clipBitmap):
        (WebCore::drawPatternSimple):
        (WebCore::SharedBitmap::drawPattern):
        (WebCore::SharedBitmap::DCProvider::getDC):
        * platform/graphics/wince/SharedBitmap.h:

2013-11-03  Antti Koivisto  <antti@apple.com>

        Add helpers for partial descendant traversal to element iterators
        https://bugs.webkit.org/show_bug.cgi?id=123703

        Reviewed by Andreas Kling.

        * dom/ElementAncestorIterator.h:
        (WebCore::lineageOfType):
        
            lineageOfType definition didn't match the declaration.

        * dom/ElementDescendantIterator.h:
        (WebCore::::find):
        (WebCore::::from):
        
            Add find and from for getting begin iterator for partial traversals.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        (WebCore::FrameSelection::currentForm):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::findClosestFormAncestor):
        
            Use them in a few places.

2013-11-03  Andreas Kling  <akling@apple.com>

        Inline RenderStyle functions for getting/setting pseudo style bits.
        <https://webkit.org/b/123702>

        hasPseudoStyle() actually shows up on html5-full-render.html,
        and it's pretty crazy to eat the cost of a function call just
        to do some basic bit twiddling.

        Reviewed by Antti Koivisto.

2013-11-03  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.initialTime
        https://bugs.webkit.org/show_bug.cgi?id=123572

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/35033002

        initialTime has been removed from the HTMLMediaElement.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_initial_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed HTMLMediaElement::initialTime.

2013-11-02  Alexey Proskuryakov  <ap@apple.com>

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-02  Christophe Dumez  <ch.dumez@samsung.com>

        EnforceRange doesn't enforce range of a short
        https://bugs.webkit.org/show_bug.cgi?id=123661

        Reviewed by Alexey Proskuryakov.

        Handle Web IDL short / unsigned short types as per the
        specification:
        - http://www.w3.org/TR/WebIDL/#es-short
        - http://www.w3.org/TR/WebIDL/#es-unsigned-short

        Specifically, we used to treat short / unsigned short as 32bit
        integers, which was wrong. We now properly handle them as 16bit
        integers.

        No new tests, added test cases to js/dom/webidl-type-mapping.html.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toSmallerInt):
        (WebCore::toSmallerUInt):
        (WebCore::toInt8):
        (WebCore::toUInt8):
        (WebCore::toInt16):
        (WebCore::toUInt16):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testShort):
        (WebCore::TypeConversions::setTestShort):
        (WebCore::TypeConversions::testEnforceRangeShort):
        (WebCore::TypeConversions::setTestEnforceRangeShort):
        (WebCore::TypeConversions::testUnsignedShort):
        (WebCore::TypeConversions::setTestUnsignedShort):
        (WebCore::TypeConversions::testEnforceRangeUnsignedShort):
        (WebCore::TypeConversions::setTestEnforceRangeUnsignedShort):
        * testing/TypeConversions.idl:

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Cleanup OpenTypeUtilities
        https://bugs.webkit.org/show_bug.cgi?id=123686

        Reviewed by Darin Adler.

        Merge the WinCE specific code into the general Windows code to
        make the compilation of WinCE port on WinNT easier.

        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont):
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSFontFaceSrcValue constructors should return PassRef.
        <https://webkit.org/b/123692>

        Make functions that return non-null CSSFontFaceSrcValues return
        PassRef instead of PassRefPtr. Tweak some call sites to be
        slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSStyleSheet::contents() should return a reference.
        <https://webkit.org/b/123689>

        Make CSSStyleSheet::contents() return a StyleSheetContents& instead
        of a pointer. The object was already stored in a Ref.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSReflectValue constructor should return PassRef.
        <https://webkit.org/b/123963>

        Make CSSReflectValue::create() return a PassRef. Tweak one call
        site to be slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSFontFeatureValue constructor should return PassRef.
        <https://webkit.org/b/123691>

        Make CSSFontFeatureValue::create() return PassRef, since it never
        returns null. Tweak one call site to be slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGResources::buildCachedResources().
        <https://webkit.org/b/123690>

        Make this function take a RenderElement&/SVGRenderStyle& pair instead
        of a RenderObject*/SVGRenderStyle* pair. Also tweaked the code a bit,
        removing ampersands and asserts as appropriate.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSImageValue constructors should return PassRef.
        <https://webkit.org/b/123688>

        Make the CSSImageValue::create() helpers return PassRef.
        Tightened call sites to avoid null checks and destructor calls.

        Reviewed by Anders Carlsson.

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix compilation of SynchronousLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=123676

        Reviewed by Darin Adler.

        Assign a ResourceRequest varibale an empty ResourceRequest instead of 0.
        The current solution only works for ports which can create a
        ResourceRequest from a pointer, which might not be true for all ports.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Port LoggingWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=123678

        Reviewed by Darin Adler.

        This makes it easier to use a common list of files
        for the different Windows ports later.

        * PlatformWin.cmake:
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix UnicodeWchar after r157330.
        https://bugs.webkit.org/show_bug.cgi?id=123668

        Reviewed by Darin Adler.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::generateComponents):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        (WebCore::isCharStop):
        (WebCore::isLineStop):
        (WebCore::isSentenceStop):
        (WebCore::WordBreakIterator::next):
        (WebCore::WordBreakIterator::previous):

2013-11-02  Andreas Kling  <akling@apple.com>

        Use RenderChildIterator in a couple of places.
        <https://webkit.org/b/123684>

        Added isRendererOfType() for RenderBox and RenderBlock and switch
        some loops over to using childrenOfType<>. Also sprinkled const
        and references on touched code.

        Reviewed by Antti Koivisto.

2013-11-02  Zan Dobersek  <zdobersek@igalia.com>

        Manage FileReaderLoader through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123666

        Reviewed by Anders Carlsson.

        Construct FileReaderLoader objects through std::make_unique and store them in std::unique_ptr.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        * fileapi/FileReader.h:

2013-11-02  Andreas Kling  <akling@apple.com>

        Add a child renderer iterator.
        <https://webkit.org/b/123662>

        Introduce an ElementIterator-style iterator for renderers and put
        it to use in a childrenOfType() implementation.

        It's used just like the Element iterators:

        auto sections = childrenOfType<RenderTableSection>(*this);
        for (auto section = sections.begin(), section = sections.end(); section != sections.end(); ++section)
            section->thisOrThat();

        Just like the DOM counterpart, it relies on a templatized helper:

            bool isRendererOfType<T>(const RenderObject&)

        This patch puts the iterator to use in a couple of random places.

        Reviewed by Antti Koivisto.

2013-11-02  Alexey Proskuryakov  <ap@apple.com>

        Implement remaining SHA variations for WebCrypto
        https://bugs.webkit.org/show_bug.cgi?id=123659

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/sha-224.html
               crypto/subtle/sha-256.html
               crypto/subtle/sha-384.html
               crypto/subtle/sha-512.html

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::~CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::create):
        (WebCore::CryptoAlgorithmSHA224::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA224.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::~CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::create):
        (WebCore::CryptoAlgorithmSHA256::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA256.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::~CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::create):
        (WebCore::CryptoAlgorithmSHA384::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA384.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::~CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::create):
        (WebCore::CryptoAlgorithmSHA512::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA512.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::digest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Various small WinCE build fixes

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/PlatformPathWinCE.h:
        * platform/win/PopupMenuWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add WebCrypto AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-192-encrypt-decrypt.html
               crypto/subtle/aes-cbc-256-encrypt-decrypt.html
               crypto/subtle/aes-cbc-encrypt-decrypt-with-padding.html
               crypto/subtle/aes-cbc-encrypt-decrypt.html
               crypto/subtle/aes-cbc-invalid-length.html
               crypto/subtle/aes-cbc-wrong-key-class.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getProperty): Factored out a function to get a property as JSValue.
        (WebCore::getHashAlgorithm): Use it.
        (WebCore::createAesCbcParams): Added converter for AesCbcParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Support AES_CBC.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Support all
        algorithms, all the new ones just have trivial dictionaries.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Ditto.

        * bindings/js/JSCryptoOperationData.cpp: Added.
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h: Added.
        Moved CryptoOperationData bindings out of JSSubtleCryptoCustom.cpp, so that we
        could use them in JSCryptoAlgorithmDictionary.cpp.

        * bindings/js/JSDOMPromise.h: (WebCore::PromiseWrapper::reject): Added a specialization
        to reject with null result. The spec doesn't actually say how algorithms fail.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt): Added.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Style fix.

        * crypto/CryptoAlgorithmAesCbcParams.h: Added.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKeyClass):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        Added poor man's RTTI, so that we can safely upcast Keys passed fro JavaScript code.

        * crypto/CryptoKeyAES.cpp: Added.
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::~CryptoKeyAES):
        (WebCore::CryptoKeyAES::buildAlgorithmDescription):
        * crypto/CryptoKeyAES.h: Added.
        (WebCore::asCryptoKeyAES):
        AES keys are the same for all algorithms, but they still need to remember the algorithm.

        * crypto/SubtleCrypto.idl: Added encrypt/decrypt.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CBC::CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::~CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::create):
        (WebCore::CryptoAlgorithmAES_CBC::identifier):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h: Added.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Added.
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Check key class before casting it to CryptoKeyHMAC.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-CBC
        on Mac, so that it can be used.

2013-11-01  Andreas Kling  <akling@apple.com>

        SVGRenderStyle accessors should return references.
        <https://webkit.org/b/123656>

        RenderStyle::svgStyle() and accessSVGStyle() never return null,
        so make them return references instead.
        
        This flushed out a myriad of pointless null checks and assertions.

        Reviewed by Anders Carlsson.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing MediaStreamTrackVector and MediaStreamSourceVector typedefs
        https://bugs.webkit.org/show_bug.cgi?id=123648

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        createFontFaceValue() should be smarter about overgrown cache.
        <https://webkit.org/b/123643>

        Instead of clearing the whole font-face value cache when it passes
        128 entries, just delete one entry at random.

        Reviewed by Geoffrey Garen.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mac code to use new MediaStreamDescriptor create method
        https://bugs.webkit.org/show_bug.cgi?id=123653

        Reviewed by Eric Carlson.

        No new tests needed.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):

2013-11-01  Andreas Kling  <akling@apple.com>

        Re-use existing RenderStyle local in textWidth().
        <https://webkit.org/b/123392>

        We already have the RenderStyle cached in a local here, so avoid
        getting it from RenderText since that has to go via the parent.

        Reviewed by Antti Koivisto.

2013-11-01  Andreas Kling  <akling@apple.com>

        Neuter WTF_MAKE_FAST_ALLOCATED in GLOBAL_FASTMALLOC_NEW builds.
        <https://webkit.org/b/123639>

        WebCore::TimerBase really needed to have the new/delete operators
        overridden, in order for WebCore::SuspendableTimer to be able to
        choose that "operator new" out of the two it inherits.

        Reviewed by Anders Carlsson.

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSCanvasValue construction helper should return PassRef.
        <https://webkit.org/b/123650>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Anders Carlsson.

2013-11-01  Joseph Pecoraro  <pecoraro@apple.com>

        Move CF/Mac WTF String implementations down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=123635

        Reviewed by Sam Weinig.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing unnecessary early returns in addTrack, removeTrack and removeRemoteSource methods
        https://bugs.webkit.org/show_bug.cgi?id=123644

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSAspectRatioValue construction helper should return PassRef.
        <https://webkit.org/b/123645>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Darin Adler.

2013-11-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Initial implementation of text-decoration-skip ink
        https://bugs.webkit.org/show_bug.cgi?id=121806

        Reviewed by Darin Adler.

        text-decoration-skip: ink is implemented by the following steps:
        1. Before drawing any decorations, figure out the bounding box for the decorations that will be drawn
        2. Create an ImageBuffer with these dimensions
        3. Draw text into this ImageBuffer with a thicker stroke
        4. Apply the ImageBuffer as a mask to the context
        5. Draw decorations like normal
        6. Clean up

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Don't call GraphicsContext::roundToDevicePixels
        when painting is disabled
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Pass the TextPainter to paintDecoration
        (WebCore::computeUnderlineOffset): Small cleanup
        (WebCore::getWavyStrokeControlPointDistance): Pulling out of strokeWavyTextDecoration()
        (WebCore::getWavyStrokeStep): Ditto
        (WebCore::strokeWavyTextDecoration): Use the previous 2 functions
        (WebCore::getSingleDecorationBoundingBox): Pulling out repeated code into a function
        (WebCore::getDecorationBoundingBox): Compute the bounding box for an underline which
        hasn't been drawn yet
        (WebCore::InlineTextBox::paintDecoration): Construct a mask and apply it to the GraphicsContext
        * rendering/InlineTextBox.h: paintDecoration needs the TextPainter
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline): Redraw the underline when
        text-decoration-skip changes

2013-11-01  Andreas Kling  <akling@apple.com>

        CSS 'initial' and 'inherit' value constructors should return PassRef.
        <https://webkit.org/b/123641>

        Make the helpers involved in constructing CSS{Initial,Inherited}Value
        all return PassRef instead of PassRefPtr. This avoids generating
        pointless null checks at the call sites.

        Reviewed by Darin Adler.

2013-11-01  Andreas Kling  <akling@apple.com>

        Kill RenderArena.
        <https://webkit.org/b/123634>

        There are no remaining users of the RenderArena allocator.

        Reviewed by Geoffrey Garen.

2013-11-01  James Craig  <jcraig@apple.com>

        AX: Regression: media controls are no longer accessible
        https://bugs.webkit.org/show_bug.cgi?id=121990

        Reviewed by Jer Noble.

        Updated existing test coverage.
        Added ARIA roles, attrs, and labels to the new media controls shadow DOM.
        Localization will be handled in http://webkit.org/b/120956

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.UIString):
        (Controller.prototype.createControls):
        (Controller.prototype.handleLoadStart):
        (Controller.prototype.handleError):
        (Controller.prototype.handleAbort):
        (Controller.prototype.handleSuspend):
        (Controller.prototype.handleStalled):
        (Controller.prototype.handleWaiting):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.updatePlaying):

2013-11-01  Andreas Kling  <akling@apple.com>

        Take BidiRuns out of the arena.
        <https://webkit.org/b/123630>

        Stop arena-allocating BidiRun objects and use regular new/delete.

        With this, there are no remaining clients of RenderArena.
        It will be removed in a subsequent patch.

        Reviewed by Anders Carlsson.

2013-11-01  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Expose setApplicationCacheOriginQuota via window.internals
        https://bugs.webkit.org/show_bug.cgi?id=87838

        Reviewed by Joseph Pecoraro.

        Also reset the default origin quota in resetToConsistentState().

        * testing/Internals.cpp: Add setApplicationCacheOriginQuota.
        (WebCore::Internals::resetToConsistentState): Reset the default origin
        quota.
        (WebCore::Internals::setApplicationCacheOriginQuota): Added.
        * testing/Internals.h: Add setApplicationCacheOriginQuota.
        * testing/Internals.idl: Ditto.

2013-11-01  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Explicitly initialize RefCounted base class in MediaStreamTrack's constructors
        https://bugs.webkit.org/show_bug.cgi?id=123620

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding addRemoteTrack and removeRemoteTrack functions to MediaStreamDescriptor and MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=123477

        Reviewed by Eric Carlson.

        When the backend report that a remote track has been added or removed by a remote peer, we must be able to add
        it to its MediaStream

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack): Splitted in two parts that can be used by old addTrack and new addRemoteTrack.
        (WebCore::MediaStream::removeTrack): Splitted in two parts that can be used by old removeTrack and new
        removeRemoteTrack.
        (WebCore::MediaStream::addRemoteSource): Reusing code in new addTrack method.
        (WebCore::MediaStream::removeRemoteSource): Refactored.
        (WebCore::MediaStream::addRemoteTrack): Added.
        (WebCore::MediaStream::removeRemoteTrack): Added.
        (WebCore::MediaStream::getTrackVectorForType): Helper method that returns a vector of tracks according to
        track's type (Audio or Video).

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addRemoteTrack): Added.
        (WebCore::MediaStreamDescriptor::removeRemoteTrack): Added.
        * platform/mediastream/MediaStreamDescriptor.h:

2013-11-01  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Support audio and video tracks
        https://bugs.webkit.org/show_bug.cgi?id=117039

        Reviewed by Philippe Normand.

        Tests: media/track/audio/audio-track-mkv-vorbis-addtrack.html
               media/track/audio/audio-track-mkv-vorbis-enabled.html
               media/track/audio/audio-track-mkv-vorbis-language.html
               media/track/in-band/track-in-band-kate-ogg-addtrack.html
               media/track/in-band/track-in-band-srt-mkv-addtrack.html
               media/track/video/video-track-mkv-theora-addtrack.html
               media/track/video/video-track-mkv-theora-language.html
               media/track/video/video-track-mkv-theora-selected.html

        * GNUmakefile.list.am: Add audio and video track files.
        * PlatformEfl.cmake: Same.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Schedule "change" event.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::setEnabled): Call m_private->setEnabled
        (WebCore::AudioTrack::enabledChanged): Added callback.
        (WebCore::AudioTrack::labelChanged): Same.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemoveAudioTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/AudioTrack.h: Add new enabled, label and language callbacks.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setSelected): Call m_private->setEnabled
        (WebCore::VideoTrack::selectedChanged): Added callback.
        (WebCore::VideoTrack::labelChanged): Same.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemoveVideoTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/VideoTrack.h: Add new selected, label and language callbacks.
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setEnabled): Call m_client->enabledChanged
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setSelected): Call m_client->selectedChanged
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer): Add ASSERT(m_pad)
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfTagsChanged): Look at all tag events instead of just the first one.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVideoSinkCapsChangedCallback): Separated callback when caps change from callback when number of videos change.
        (WebCore::mediaPlayerPrivateVideoCapsChangeTimeoutCallback): Same.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Initialize m_videoCapsTimerHandler.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Disconnect audio and video tracks and remove callbacks.
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Create video tracks for each stream.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Create audio tracks for each stream.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add audio and video tracks, and a pointer to keep track of the default audio stream.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr<GstTagList>
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp: Added, handles tags and "active" property of audio and video tracks.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Added.

2013-11-01  Patrick Gansterer  <paroga@webkit.org>

        Buildfix for !ENABLE(INSPECTOR) after 157288.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):

2013-11-01  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Avoid explicit traversal of text controls and the render tree in AtkText implementation
        https://bugs.webkit.org/show_bug.cgi?id=123153

        Reviewed by Chris Fleizach.

        Remove functions from the AtkText implementation that manually
        walk the render tree to compose the text for a exposed objects in
        certain cases (e.g. anonymous blocks, text controls).

        The reason for this change is that the current implementation
        follows an error-prone approach, since by doing things like
        manually walking the render tree from here we are not properly
        considering all the possible scenarios that might happen when
        traversing text. This, however, is a task that is better suited
        for the TextIterator, which is already written to consider all
        those cases and to emit the proper character in every single
        situation: text nodes, replaced objects and so on.

        So, by removing all that too specific code (textForObject() and
        textForRenderer() mainly) from WebKitAccessibleInterfaceText.cpp
        and relying in AccessibilityObject::textUnderElement(), which it
        ends up using the TextIterator for certain cases, we have a much
        better and robust method of retrieving the text associated with an
        instance of AtkObject implementing the AtkText interface.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetText): Removed call to textForObject(), now that
        we have just removed that function, together with textForRenderer().

        Make AccessibilityRenderObject::textUnderElement() able to deal with
        anonymous blocks directly, by creating a range based in the boundaries
        defined by the first and last child renderers for that block. This will
        make possible to treat an anonymous block as a whole instead of having
        to rely in the concatenation of each of its children, as it does now.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement): Added a new code
        path to deal with anonymous blocks for text renderers, or when including
        all the children is explicitly requested.

        Modified TextIterator so text for children of replaced objects are
        ignored if we are emmiting the special character for those objects.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement): Make sure no children are
        handled a replaced object if m_emitsObjectReplacementCharacters is set.
        * editing/TextIterator.h: Updated m_emitsObjectReplacementCharacters
        description to reflect the new behavior.

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add a Mac WebCrypto implementation of HMAC importKey/sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=123598

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp: Added property svn:eol-style.
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::importKey):
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: Added.
        (WebCore::CryptoAlgorithmHMAC::CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::~CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::create):
        (WebCore::CryptoAlgorithmHMAC::identifier):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h: Added.
        * crypto/keys: Added.
        * crypto/keys/CryptoKeyHMAC.cpp: Added.
        (WebCore::CryptoKeyHMAC::CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::~CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::buildAlgorithmDescription):
        * crypto/keys/CryptoKeyHMAC.h: Added.
        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Added.
        (WebCore::getCommonCryptoAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up a few Inspector interfaces
        https://bugs.webkit.org/show_bug.cgi?id=123594

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::name):
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        (WebCore::InspectorConsoleAgent::enabled):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::profilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::enabled):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::enabled):

2013-10-31  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Vend layer contents via IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=123600

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export sRGBColorSpaceRef.

        * WebCore.xcodeproj/project.pbxproj:
        Expose GraphicsContextCG.h.

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused Page::setDebuggerForAllPages
        https://bugs.webkit.org/show_bug.cgi?id=123602

        Reviewed by Timothy Hatcher.

        * page/Page.cpp:
        * page/Page.h:

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorState
        https://bugs.webkit.org/show_bug.cgi?id=123547

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorApplicationCacheAgent::create):
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        (WebCore::InspectorCSSAgent::create):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        * inspector/InspectorInputAgent.h:
        (WebCore::InspectorInputAgent::create):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        * inspector/InspectorLayerTreeAgent.h:
        (WebCore::InspectorLayerTreeAgent::create):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        (WebCore::InspectorMemoryAgent::create):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.cpp: Removed.
        * inspector/InspectorState.h: Removed.
        * inspector/InspectorStateClient.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:

2013-10-31  Brady Eidson  <beidson@apple.com>

        Split PendingDeleteCall into its own header
        https://bugs.webkit.org/show_bug.cgi?id=123597

        Reviewed by Beth “Okay I guess so, bro” Dakin.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBPendingDeleteCall.h: Added.
        (WebCore::IDBPendingDeleteCall::create):
        (WebCore::IDBPendingDeleteCall::callbacks):
        (WebCore::IDBPendingDeleteCall::IDBPendingDeleteCall):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Convert some InspectorObject member variables to HashSet/HashMap
        https://bugs.webkit.org/show_bug.cgi?id=123579

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        Make m_eventListenerBreakpoints and m_xhrBreakpoints HashSet.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        Make m_javaScriptBreakpoints a HashMap.

2013-10-31  Youenn Fablet  <youennf@gmail.com>

        Correct the elapsedTime calculation in SVG animations
        https://bugs.webkit.org/show_bug.cgi?id=119289

        Reviewed by Brent Fulgham.

        Merged from Blink: https://chromium.googlesource.com/chromium/blink/+/338f9badca7fb7880abdb0cecd5f02493c1f7d2e

        Test: svg/animations/getCurrentTime-pause-unpause.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::elapsed):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::setElapsed):
        * svg/animation/SMILTimeContainer.h:

2013-10-31  Andreas Kling  <akling@apple.com>

        Manage line-grid RootInlineBox with unique_ptr.
        <https://webkit.org/b/123583>

        Use smart pointers for the RenderBlockFlow's optional line-grid box
        instead of manual new/delete.

        Reviewed by Antti Koivisto.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Enable WebCrypto on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123587

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig: Enable it.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Build fix.

        * crypto/CryptoAlgorithmRegistry.cpp: (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        Special case empty keys to avoid upsetting HashMap.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::create):
        Build fix. Can't use make_unique, because constructor is private.

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Dean Jackson.

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into
        GraphicsContext::computeLineBoundsForText, then passes the result to
        drawLineForText

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Signature of new computeLineBoundsForText
        function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Ditto
        (WebCore::GraphicsContext::drawLineForText): Use computeLineBoundsForText
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Static function that
        performs the actual bounds computation
        (WebCore::GraphicsContext::computeLineBoundsForText): Calls
        computeLineBoundsAndAntialiasingModeForText
        (WebCore::GraphicsContext::drawLineForText): Use new function
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Brady Eidson.

        Here's another speculative fix. If a scrollbar was removed, we would not properly 
        inform the scrolling thread. Instead of checking supportsUpdateOnSecondaryThread() 
        before calling setScrollbarPaintersFromScrollbars(), check it from within 
        setScrollbarPaintersFromScrollbars(), and this will allow the ScrollbarPainter to 
        be properly updated.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after 158386. (buildfix after r158365)

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Move CSS3 text decoration implementation behind ENABLE(CSS3_TEXT_DECORATION)
        https://bugs.webkit.org/show_bug.cgi?id=123541

        Reviewed by Tim Horton.

        Enabled CSS3 text decoration tests

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationStyleFlagsToCSSValue): Mapping internal
        representation to a CSSValue
        (WebCore::ComputedStyleExtractor::propertyValue): Ditto
        * css/CSSParser.cpp: Moving parsing functions behind new flag
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextDecorationSkip):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSPropertyNames.in: Marking the new properties behind new flag
        * css/CSSValueKeywords.in: Marking new values behind new flag
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty): Move text decoration shorthand
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        [WebCrypto] Add SHA-1
        https://bugs.webkit.org/show_bug.cgi?id=123582

        Reviewed by Anders Carlsson.

        Tests: security/crypto-subtle-arguments.html
               security/crypto-subtle-sha1.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/SubtleCrypto.idl:
        Added bindings for crypto.digest.

        * crypto/algorithms: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register SHA-1.

        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA1::digest): Performs the work synchronously, because
        otherwise we'd have to copy the data first, which is crazy for something as simple
        as hashing. We can change to a dispatch queue later if we find that it's actually
        better to copy and do the work asynchronously.

2013-10-31  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        REGRESSION(r158348): Breaks Debug build
        https://bugs.webkit.org/show_bug.cgi?id=123562

        Reviewed by Brady Eidson.

        Remove an unnecessary check that cause compilation failure.

        No new tests since this just fixes the build failure.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didAddRemoteStream):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r158365.

        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack):
        * Modules/mediastream/VideoStreamTrack.h:

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Decorated text sometimes does not draw its decorations
        https://bugs.webkit.org/show_bug.cgi?id=123539

        Reviewed by Antti Koivisto.

        Decorated text should opt-out of the simple line layout, because
        SimpleLineLayout::paintFlow doesn't draw decorations

        Fixes fast/css3-text/css3-text-decoration/text-decoration-color.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove last member variable uses of InspectorState from Agents
        https://bugs.webkit.org/show_bug.cgi?id=123540

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::eventListenerBreakpoints -> m_eventListenerBreakpoints.
        DOMDebuggerAgentState::xhrBreakpoints -> m_xhrBreakpoints.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        DebuggerAgentState::javaScriptBreakpoints -> m_javaScriptBreakpoints.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        PageAgentState::pageAgentScriptsToEvaluateOnLoad -> m_scriptsToEvaluateOnLoad.
        This is a lazily created InspectorObject member variable.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        ResourceAgentState::extraRequestHeaders -> m_extraRequestHeaders.
        This is a lazily created InspectorObject member variable.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, one more build fix after r158365.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Darin Adler.

        Speculative fix. I think if we retain the ScrollbarPainters, we should avoid this 
        crash.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, MediaStream build fix after r158365.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::clone):

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass an Element by reference to the PseudoElement constructor
        https://bugs.webkit.org/show_bug.cgi?id=123576

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::createPseudoElementIfNeeded):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):
        * dom/PseudoElement.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Fix a mis-merge.

        * WebCore.xcodeproj/project.pbxproj: Remove duplicate CryptoAlgorithmRegistryMac.cpp.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add bindings code for crypto algorithm dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=123476

        Reviewed by Sam Weinig.

        JSCryptoAlgorithmDictionary reads the Algorithm, much like JSDictionary does in
        simpler cases. We should see about bringing them closer together (perhaps replacing
        with autogenerated code).

        * crypto/parameters: Added.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmHmacParams.h: Added.
        Added a couple specific dictionaries as an example.

        * WebCore.xcodeproj/project.pbxproj: Added JSCryptoAlgorithmDictionary.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Added.
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        (WebCore::getHashAlgorithm):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoAlgorithmDictionary.h: Added.

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass ScriptExecutionContext by reference to from the bindings constructors
        https://bugs.webkit.org/show_bug.cgi?id=123575

        Reviewed by Andreas Kling.

        Since we null check the ScriptExecutionContext before creating the c++ class,
        we should be passing by reference.

2013-10-31  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Paint the input tag of range type on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123199

        Reviewed by Brent Fulgham.        

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintSliderThumb):

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add a crypto algorithm abstraction
        https://bugs.webkit.org/show_bug.cgi?id=123474

        Reviewed by Sam Weinig.

        This works slightly differently than WebCrypto implies. We have separate classes
        for algorithm and its parameters, while WebCrypto puts them in the same dictionary.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithm.cpp: Added. As most algorithms don't implement most
        operations, default implementations just raise an exception.
        * crypto/CryptoAlgorithm.h: Added.

        * crypto/CryptoAlgorithmParameters.h: Added. Base class for numerous future parameter
        dictionaries, such as HmacParams or HmacKeyParams.

        * crypto/CryptoAlgorithmRegistry.cpp: Added.
        * crypto/CryptoAlgorithmRegistry.h: Added.
        The registry decouples universal bindings code from algorithms that may or may not
        be implemented on each platform.

        * crypto/mac: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp: Added.
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Algorithms implemented
        on Mac will be registered by this function.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION(r158333): http/tests/xmlhttprequest/response-encoding.html and xmlhttprequest-overridemimetype-content-type-header.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=123548

        Reviewed by Brady Eidson.

        We had code that made sure that cached 200 responses weren't used for conditional
        requests. But it didn't work the other way - cached 304 responses got reused for
        subsequent unconditional requests!

        Adding the test uncovered this bug.

        * loader/cache/CachedRawResource.cpp: (WebCore::shouldIgnoreHeaderForCacheReuse):
        Should never ignore conditional headers. Code in determineRevalidationPolicy
        was already undoing this for conditional requests, but we also shouldn't use
        WebCore cache if it holds a 304 response to conditional request.

        * loader/cache/CachedResourceLoader.cpp: (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        Even though the changed code is only for raw resources, I think that we can never
        get a conditional request here any more.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        CryptoAlgorithmDescriptionBuilder should support producing nested algorithms
        https://bugs.webkit.org/show_bug.cgi?id=123461

        Reviewed by Darin Adler.

        To add a nested algorithm, clone a builder with createEmptyClone(), fill it,
        and add it using add().

        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::createEmptyClone):
        (WebCore::JSCryptoAlgorithmBuilder::add): Keep VM in a local variable for marginally
        better performance.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK] enable-media-stream Setting
        https://bugs.webkit.org/show_bug.cgi?id=123145

        Reviewed by Anders Carlsson.

        * page/Settings.in: new mediaStreamEnabled setting.

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        Manage SVGPathByteStream through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123467

        Reviewed by Anders Carlsson.

        Manage SVGPathByteStream objects through std::unique_ptr. Constructors for the class are made public
        so std::make_unique can be used with the class.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createPath):
        * svg/SVGAnimatedType.h:
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::SVGPathByteStream): Takes a const Data object that's then copied.
        (WebCore::SVGPathByteStream::copy): Made const.
        * svg/SVGPathByteStreamBuilder.cpp: Remove an unnecessary include.
        * svg/SVGPathByteStreamBuilder.h: Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::addToSVGPathByteStream):

2013-10-31  Marcin Bychawski  <m.bychawski@samsung.com>

        Removing m_maxDeadCapacity condition in fast path in MemoryCache::prune().
        https://bugs.webkit.org/show_bug.cgi?id=115631

        Reviewed by Brent Fulgham.

        If the m_maxDeadSize and m_deadSize are both 0, the method unnecessairly tries to prune resources.

        No new tests, covered by existing ones.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::prune):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale optional native memory instrumentation protocol params
        https://bugs.webkit.org/show_bug.cgi?id=123552

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        * inspector/InspectorTimelineAgent.h:

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Undefined references to RenderObject::style() when disabling video support
        https://bugs.webkit.org/show_bug.cgi?id=123492

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/RenderThemeGtk2.cpp: Disabling video support removes indirect inclusion of the RenderElement.h
        header, causing undefined references to RenderObject::style(). The RenderElement.h header should be included
        instead of RenderObject.h as the former defines the RenderObject::style() inline and also includes the latter.
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.

2013-10-31  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/textbox-role-reports-selection.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112017

        Reviewed by Mario Sanchez Prada.

        getSelectionOffsetsForObject() now returns proper start/end offsets for
        selections "touching" the object's front border.

        No new tests, covered by existing ones.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):

2013-10-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][GLES] OpenGL should be optional
        https://bugs.webkit.org/show_bug.cgi?id=123399

        Reviewed by Noam Rosenthal.

        * CMakeLists.txt: Make OpenGL dependencies as optional.
        * PlatformEfl.cmake:
        Move OpenGL macro to OptionsEfl.cmake and make Xcomposite and XRender as optional.
        * platform/graphics/OpenGLESShims.h:
        Removed GL_COLOR_ATTACHMENT0_EXT because it was added to gl2ext.h since r153064
        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Removed wrong GLX guard.
        (WebCore::GraphicsSurfaceToken::GraphicsSurfaceToken):
        (WebCore::GraphicsSurfaceToken::operator!=):
        (WebCore::GraphicsSurfaceToken::isValid):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        Removed unnecessary OpenGLShims.h

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/editing] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123524

        Reviewed by Ryosuke Niwa.

        Removing redundant header files.

        * editing/AlternativeTextController.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/DeleteButton.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/DictationCommand.cpp:
        * editing/EditCommand.cpp:
        * editing/EditingStyle.cpp:
        * editing/EditorCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/MarkupAccumulator.h:
        * editing/RemoveFormatCommand.cpp:
        * editing/RenderedPosition.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SpellChecker.cpp:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SurroundingText.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisibleSelection.cpp:
        * editing/VisibleUnits.cpp:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/htmlediting.cpp:

2013-10-30  Brady Eidson  <beidson@apple.com>

        IDB Database versions are uint64_t, not int64_t
        https://bugs.webkit.org/show_bug.cgi?id=123556

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBPendingOpenCall.h:
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-10-30  Brendan Long  <b.long@cablelabs.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Reviewed by Alexey Proskuryakov.

        No new tests since this just fixes the build.

        * GNUmakefile.list.am: Add JSCryptoKey.cpp and JSCryptoKey.h

2013-10-30  Andreas Kling  <akling@apple.com>

        Manage EllipsisBox objects with unique_ptr.
        <https://webkit.org/b/123554>

        Use smart pointers to store ellipsis boxes instead of new/delete.

        Reviewed by Anders Carlsson.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Use a correct style for JSC includes.

        * ForwardingHeaders/runtime/JSPromise.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Added.
        * bindings/js/JSDOMPromise.h:

2013-10-30  Andreas Kling  <akling@apple.com>

        Replace InlineBox::destroy() with regular virtual destruction.
        <https://webkit.org/b/123550>

        Move logic out of destroy() and its overloads into good ol' virtual
        destructors instead.

        Reviewed by Anders Carlsson.

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Simplifying MediaStream and MediStreamDescriptor creation
        https://bugs.webkit.org/show_bug.cgi?id=123443

        Reviewed by Eric Carlson.

        The internal process of creating a MediaStream and MediaStreamDescriptor was quite confusing and spread.
        We can take advantage of the platform implementation of MediaStreamTrack (aka MediaStreamTrackPrivate)
        and simplify the whole process.
        A new constructor that receives vectors of MediaStreamTrackPrivate objects were added, then the check
        if a source already exists or if the tracks are all ended are now made in MediaStreamDescriptor.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create): Removed unnecessary variables in one create method and using new
        MediaStreamDescriptor::create method that receives vector of MediaStreamTrackPrivate objects as parameter.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Removed passing flag to
        MediaStreamDescriptor create.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create): Removed EndedAtCreationFlag parameter, because this is being
        handled inside constructor by analyzing the tracks or sources passed.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Adding new constructor that receives vector of
        MediaStreamTrackPrivate as parameter.

        (WebCore::MediaStreamDescriptor::addTrack): Changed to store the track's source in the object.

        (WebCore::MediaStreamDescriptor::removeTrack):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
        (WebCore::MediaStreamDescriptor::audioTracks):
        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
        (WebCore::MediaStreamDescriptor::videoTracks):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream): Removing flag that is being passed to
        MediaStreamDescriptor's create method.

2013-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Legible Output callbacks should happen on notification queue
        https://bugs.webkit.org/show_bug.cgi?id=123545

        Reviewed by Eric Carlson.

        Modify the callback creation for Legible Output items so that they
        are made on our notification queue. The use of the main queue was a
        holdover from some temporary code used during earlier development.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::AVFWrapper): Assert this happens on the main thread.
        (WebCore::AVFWrapper::~AVFWrapper): Ditto.
        (WebCore::destroyAVFWrapper): Ditto.
        (WebCore::AVFWrapper::createPlayer): Ditto.
        (WebCore::AVFWrapper::createPlayerItem): Ditto.
        Also, instruct LegibleOutput callbacks to happen on our notification
        queue, rather than the main thread.
        (WebCore::AVFWrapper::createAVCFVideoLayer): Assert this happens on the main thread.
        (WebCore::AVFWrapper::destroyVideoLayer): Ditto.
        (WebCore::AVFWrapper::createImageGenerator): Ditto.
        (WebCore::AVFWrapper::destroyImageGenerator): Ditto.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        XHR.response is null when requesting empty file as arraybuffer
        https://bugs.webkit.org/show_bug.cgi?id=123457

        Reviewed by Sam Weinig.

        Test: http/tests/xmlhttprequest/response-empty-arraybuffer.html

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseArrayBuffer): Don't do this.

2013-10-30  Samuel White  <samuel_white@apple.com>

        AX: AXFocused not exposed on ARIA menuitems
        https://bugs.webkit.org/show_bug.cgi?id=123494

        Reviewed by Chris Fleizach.

        ARIA menuitems should expose AXFocused accessibility attribute.

        Test: platform/mac/accessibility/aria-menuitem-focus.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove basic uses of InspectorState from agents
        https://bugs.webkit.org/show_bug.cgi?id=123534

        Reviewed by Timothy Hatcher.

        * inspector/InspectorAgent.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::disable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        InspectorAgentState::inspectorAgentEnabled -> m_enabled.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::enable):
        Remove unused state.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::startSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        Remove unused states. Make CSSAgentState::isSelectorProfiling check profile object exists or not.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        Remove unused state, member variable already existed.

        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        ConsoleAgentState::consoleMessagesEnabled already had m_enabled.
        ConsoleAgentState::monitoringXHR -> m_monitoringXHREnabled.
        
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        DOMAgentState::documentRequested -> m_documentRequested.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::pauseOnAllXHRs -> m_pauseOnAllXHRsEnabled.

        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        DOMStorageAgentState::domStorageAgentEnabled -> m_enabled.

        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        Remove unused state, m_enabled already existed.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsImpl):
        DebuggerAgentState::pauseOnExceptionsState removed, never read.
        DebuggerAgentState::debuggerEnabled -> m_enabled.

        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        HeapProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        Remove unused state, never read.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        Remove unused state, did not need to be read.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::webViewResized):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::deviceMetricsChanged):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::setShowDebugBorders):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::applyScreenWidthOverride):
        (WebCore::InspectorPageAgent::applyScreenHeightOverride):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::updateTouchEventEmulationInPage):
        (WebCore::InspectorPageAgent::setTouchEmulationEnabled):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::applyEmulatedMedia):
        PageAgentState::pageAgentScreenWidthOverride -> m_screenWidthOverride.
        PageAgentState::pageAgentScreenHeightOverride -> m_screenHeightOverride.
        PageAgentState::pageAgentFontScaleFactorOverride -> m_fontScaleFactorOverride.
        PageAgentState::pageAgentFitWindow -> m_fitWindowOverride.
        PageAgentState::pageAgentShowPaintRects -> m_showPaintRects.
        PageAgentState::pageAgentEmulatedMedia -> m_emulatedMedia.
        Remove other unused states.

        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        (WebCore::InspectorProfilerAgent::enabled):
        ProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.
        Remove other unused states.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        (WebCore::InspectorResourceAgent::setCacheDisabled):
        (WebCore::InspectorResourceAgent::mainFrameNavigated):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        ResourceAgentState::resourceAgentEnabled -> m_enabled.
        ResourceAgentState::cacheDisabled -> m_cacheDisabled.
        ResourceAgentState::userAgentOverride -> m_userAgentOverride (this already existed and was unused).

        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        TimelineAgentState::timelineAgentEnabled -> m_enabled.
        TimelineAgentState::includeDomCounters -> m_includeDOMCounters.
        Remove other unused states.

        * inspector/InspectorWorkerAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        WorkerAgentState::workerInspectionEnabled -> m_enabled.
        WorkerAgentState::autoconnectToWorkers -> m_shouldPauseDedicatedWorkerOnStart.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        Remove unused state, not read.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=123542

        Reviewed by Anders Carlsson.

        Removed the code for Mac OS X 10.7.

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::flushContext):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollAnimationEnabledForSystem):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::reboundDeltaForElasticDelta):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::textField):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        85 inspector tests asserting in DrawingAreaProxyImpl::updateAcceleratedCompositingMode()
        when there is a stale WebKitTestRunner preference
        https://bugs.webkit.org/show_bug.cgi?id=115115

        Reviewed by Darin Adler.

        * page/Settings.cpp:
        (WebCore::Settings::setMockScrollbarsEnabled):
        (WebCore::Settings::setUsesOverlayScrollbars):
        Added FIXMEs.

2013-10-30  Andreas Kling  <akling@apple.com>

        Take line boxes out of the arena.
        <https://webkit.org/b/123533>

        Stop arena-allocating line boxes so we can move forward on improving
        render tree memory management. This will also allow more rendering
        code to take advantage of malloc optimizations.

        This will likely regress performance on some micro-benchmarks, but
        it's something we want to do sooner rather than later so we have time
        to restabilize it. All improvements to the simple line layout's
        coverage will help with recouping whatever is regressed.

        BiDi runs are the only remaining user of the arena now.

        Reviewed by Antti Koivisto

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::restore functionality
        https://bugs.webkit.org/show_bug.cgi?id=123525

        Reviewed by Timothy Hatcher.

        Remove unused InspectorAgent restore functionality.

        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.cpp:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r158288): media/media-can-play-mpeg4-video.html fails
        https://bugs.webkit.org/show_bug.cgi?id=123530

        Reviewed by Eric Carlson.

        Lower case the mime type before passing it along to MediaPlayer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Add a way to fulfill promises from DOM code
        https://bugs.webkit.org/show_bug.cgi?id=123466

        Reviewed by Sam Weinig.

        This is not perfect, as it strongly ties DOM code to JavaScript. In the future, we
        can make it better e.g. by subclassing, so that only a base interface would be exposed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSBindingsAllInOne.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        Added JSDOMPromise.

        * bindings/js/JSDOMPromise.cpp: Added.

        * bindings/js/JSDOMPromise.h: Added.
        (WebCore::PromiseWrapper::create):
        (WebCore::PromiseWrapper::fulfill): A random set of specializations that I needed
        in WebCrypto code so far.
        (WebCore::PromiseWrapper::reject): Ditto.

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        contentEditable deleting lists when list items are block level
        https://bugs.webkit.org/show_bug.cgi?id=122602

        Reviewed by Ryosuke Niwa.

        When listitems are styled with display:block/float then inserting paragraph
        twice at end of listitem delete entire list. Generally when listitem is empty
        then we delete the listitem on inserting paragraph. In this issue, on inserting
        first paragraph one empty listitem is created, and on inserting second paragraph
        we try to delete that empty listitem. but it misbehave becasue of incomplete 
        definition of htmlediting::isLisItem() and entire list is deleted.

        htmlediting::isListItem() check only render object to decide whether it is 
        list or not, so if any LI element is block level then isListItem return false.
        Now after this patch if parent of current node is list element then node is
        treated as listItem.

        Test: editing/execCommand/hit-enter-twice-atendof-block-styled-listitem.html

        * editing/htmlediting.cpp:
        (WebCore::isListItem): Modified condition to check if parent node is list;

2013-10-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed EFL build fix; give MediaEngineSupportParameters struct a default constructor.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaEngineSupportParameters::MediaEngineSupportParameters):

2013-10-30  Andreas Kling  <akling@apple.com>

        Let Page::renderTreeSize() be the number of renderers.
        <https://webkit.org/b/123518>
        <rdar://problem/15348679>

        The old metric was "number of bytes allocated in RenderArena" and
        that was heading towards obsolescence, fast.

        Instead, keep a count of RenderObjects instantiated on RenderView.
        While a bit ugly, this lets us move forward with rendering memory
        model improvements without breaking features.

        Reviewed by Beth Dakin.

2013-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        WebKit/win/WebKitGraphics.h:void WebDrawText(WebTextRenderInfo*); is never called
        https://bugs.webkit.org/show_bug.cgi?id=123485

        Reviewed by Brent Fulgham.

        WebDrawText is the only caller of WebCoreDrawTextAtPoint, so we can
        delete that as well.

        Because there is no behavior difference, no new tests are necessary.

        * platform/win/WebCoreTextRenderer.cpp:
        * platform/win/WebCoreTextRenderer.h:

2013-10-30  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r158289.

        * CMakeLists.txt:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):

2013-10-30  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        Build fails with EGLConfigSelector.cpp when OpenGL ES is not used
        https://bugs.webkit.org/show_bug.cgi?id=119037

        Reviewed by Brent Fulgham.

        Build fix for EGLConfigSelector.cpp

        No new tests, no behavior change.

        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore::EGLConfigSelector::createConfig):

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Explicitly initialize base class in MediStreamTrackPrivate copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=123473

        Reviewed by Eric Carlson.

        No new tests needed.

        Ports that enable -Werror=extra must do that to compile.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r158291.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):

2013-10-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158243.
        http://trac.webkit.org/changeset/158243
        https://bugs.webkit.org/show_bug.cgi?id=123520

        Change was wrong (Requested by smfr on #webkit).

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintCompositionUnderline):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        Favicons are flipped in vertical direction in WinCairo builds.
        https://bugs.webkit.org/show_bug.cgi?id=102077

        Reviewed by Brent Fulgham.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource compatable loading functions to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=123353

        Reviewed by Eric Carlson.

        Add methods to MediaPlayer to allow it to select the correct MediaPlayerFactory
        when attempting to load a MediaSource URL.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/MediaPlayer.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

        Remove the isSupportedMediaSourceMIMEType() method:
        * platform/MIMETypeRegistry.h:
        * platform/efl/MIMETypeRegistryEfl.cpp:
        * platform/mac/MIMETypeRegistryMac.mm:


2013-10-30  Brady Eidson  <beidson@apple.com>

        IDBCursorBackendLevelDB should be made cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123513

        Rubberstamped by Andreas Kling.

        Because of all the already-done refactoring, this is basically a file-move and global rename.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCore.vcxproj:

        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp.
        * Modules/indexeddb/IDBCursorBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h.

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] Remove legacy Media Source APIs (WebKitMediaSource, WebKitSourceBuffer, WebKitSourceBufferList)
        https://bugs.webkit.org/show_bug.cgi?id=123463

        Reviewed by Eric Carlson.

        No new tests; updated test results.

        Remove all reference to WebKitMediaSource, WebKitSourceBuffer, and WebKitSourceBufferList.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/mediasource/DOMURLMediaSource.idl:
        * Modules/mediasource/WebKitMediaSource.cpp: Removed.
        * Modules/mediasource/WebKitMediaSource.h: Removed.
        * Modules/mediasource/WebKitMediaSource.idl: Removed.
        * Modules/mediasource/WebKitSourceBuffer.cpp: Removed.
        * Modules/mediasource/WebKitSourceBuffer.h: Removed.
        * Modules/mediasource/WebKitSourceBuffer.idl: Removed.
        * Modules/mediasource/WebKitSourceBufferList.cpp: Removed.
        * Modules/mediasource/WebKitSourceBufferList.h: Removed.
        * Modules/mediasource/WebKitSourceBufferList.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTargetFactory.in:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Unbreak the release build.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-10-30  Liangjun Zeng  <lizeng@blackberry.com>

        Fix memory leaks in platform/image-encoders/JPEGImageEncoder.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118781

        Reviewed by Brent Fulgham.

        We can find the function "jpeg_finish_compress" call the function "jpeg_abort" at the end.
        And the comments of "jpeg_abort" is "Abort processing of a JPEG compression operation,
        but don't destroy the object itself". (We can find these in the "jcapimin.c" of jpeg)
        So the compression object destroy need be called.
        No new tests because this doesn't change functionality.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):

2013-10-30  Antti Koivisto  <antti@apple.com>

        Add debug settings for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=123514

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/Settings.in:
        
            Add simpleLineLayoutEnabled and simpleLineLayoutDebugBordersEnabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Cookies are sometimes not set in download request.
        https://bugs.webkit.org/show_bug.cgi?id=123445

        Reviewed by Brent Fulgham.

        Sometimes cookies are not set in the download request because the cookie file cannot be opened,
        it's already been opened by the ResourceHandleManager for writing.
        This can be fixed by getting the cookie list from the share handle in ResourceHandleManager instead.
        This will also improve performance, as there is no need to read and parse the cookie file for each download.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init): Use share handle to get cookie list.

2013-10-30  ChangSeok Oh  <changseok.oh@collabora.com>

        Unguard Element::childShouldCreateRenderer
        https://bugs.webkit.org/show_bug.cgi?id=123496

        Reviewed by Andreas Kling.

        Make Element::childShouldCreateRenderer normally accessible. Guarding it with flags
        just leaves potential build issues.

        No new tests since no functionality changed.

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Make MediaSourcePrivate, SourceBufferPrivate classes RefCounted.
        https://bugs.webkit.org/show_bug.cgi?id=123350

        Reviewed by Darin Adler.

        Make the MediaSourcePrivate and SourceBufferPrivate classes RefCounted so that
        they can be referenced both by MediaSource/SourceBuffer, and by the MediaPlayerPrivate
        which creates them.

        Change OwnPtr -> RefPtr everywhere:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::createSourceBufferPrivate):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::create):
        (WebCore::SourceBuffer::SourceBuffer):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::addSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.cpp:
        (WebCore::WebKitSourceBuffer::create):
        (WebCore::WebKitSourceBuffer::WebKitSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.h:
        * html/HTMLMediaSource.h:
        * platform/graphics/MediaSourcePrivate.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::SourceBufferPrivate):

2013-10-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Remove unused runtime enabled
        https://bugs.webkit.org/show_bug.cgi?id=123509

        Reviewed by Anders Carlsson.

        Some of the runtime enabled features were only ever used by the V8 bindings
        and can be removed as no WebKit code sets or reads them.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a class
        https://bugs.webkit.org/show_bug.cgi?id=123508

        Reviewed by Mario Sanchez Prada.

        Improve encapsulation.

2013-10-30  Antti Koivisto  <antti@apple.com>

        REGRESSION(r158214): It made zillion tests crash on GTK and EFL
        https://bugs.webkit.org/show_bug.cgi?id=123505

        * rendering/SimpleLineLayout.h: Add WTF_MAKE_FAST_ALLOCATED

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Store video-sink in a bin
        https://bugs.webkit.org/show_bug.cgi?id=122831

        Reviewed by Gustavo Noronha Silva.

        For the upcoming mediastream playback support the player will
        handle a non-playbin-based pipeline that will require a slightly
        different video rendering chain. This patch generalizes the
        encapsulation of the video sink in a bin, just like the audio sink
        case.

        No new tests, no change in functionality.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r154614): Opening and closing a picture on Facebook resets scroll position
        https://bugs.webkit.org/show_bug.cgi?id=122882

        Reviewed by Anders Carlsson.

        scrollLeft and scrollTop have to continue to function in the strict mode for the Web compatiblity.
        In particular, www.facebook.com and build.webkit.org depend on this behavior as of October 29th, 2013.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):

2013-10-29  Brady Eidson  <beidson@apple.com>

        IDBTransactionBackend should be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123449

        Reviewed by Beth Dakin.

        - Rename IDBTransactionBackendLevelDB to IDBTransactionBackendImpl
        - Rename IDBTransactionBackendLevelDBOperations to IDBTransactionBackendOperations
        - Move their files from the leveldb subdirectory to the indexeddb directory

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp.
        * Modules/indexeddb/IDBTransactionBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h.
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp.
        * Modules/indexeddb/IDBTransactionBackendOperations.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h.

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):

2013-10-29  Sam Weinig  <sam@webkit.org>

        Modernize DatasetDOMStringMap and ClassList a bit
        https://bugs.webkit.org/show_bug.cgi?id=123491

        Reviewed by Andreas Kling.

        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        * dom/ElementRareData.h:
        * html/ClassList.cpp:
        * html/ClassList.h:
        Pass the owner Element by reference and store in a std::unique_ptr.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Attempted build-fix after http://trac.webkit.org/changeset/158234

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction): Implement this!

2013-10-29  Andreas Kling  <akling@apple.com>

        ElementData construction helpers should return PassRef.
        <https://webkit.org/b/123487>

        Make functions that create new ElementData objects return appropriate
        PassRef pointers instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ build fix attempt after r158220.

        * GNUmakefile.list.am:

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123483

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBCursorBackendInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        (WebCore::IDBCursorBackendLevelDB::create):

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::registerOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::unregisterOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::closeOpenCursors):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj: Export a required header.

2013-10-29  Seokju Kwon  <seokju@webkit.org>

        Remove mutable keyword from member variables of XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=123481

        Reviewed by Andreas Kling.

        No new tests, no change in functionality.

        * xml/XMLHttpRequest.h: Remove mutable keyword as these are no longer used in const functions.

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Simon Fraser

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,  
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into 
        InlineTextBox, then passes the result to drawLineForText.

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Changing the signature of drawLineForText
        so it can accept bounds from our helper function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText): Update to work with new
        signature of drawLineForText
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Update the last call site of drawLineForText
        * rendering/InlineTextBox.cpp:
        (WebCore::computeBoundsForUnderline): Pure function that computes the adjusted
        bounds of the underline about to be drawn
        (WebCore::drawLineForText): calls computeBoundsForUnderline and then
        GraphicsContext::drawLineForText
        (WebCore::InlineTextBox::paintDecoration): Use new drawLineForText function
        (WebCore::InlineTextBox::paintCompositionUnderline): Ditto

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Fix a mismerge, remove duplicate CryptoKeyType declaration.

        * crypto/CryptoKey.h:

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: Added an enum with all registered algorithms
        (they don't have to be all implemented in any port).

        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::CryptoKey): Initialize base class variables.
        (WebCore::CryptoKey::type): Convert internal representation for bindings use.
        (WebCore::CryptoKey::buildAlgorithmDescription): Ditto. This function is supposed
        to be called by derived classes before adding other keyes.
        (WebCore::CryptoKey::usages): Convert internal representation for bindings use.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::extractable): Expose for bindings.
        (WebCore::CryptoKey::allows): A faster way to check allowed key usage from C++ code.

        * crypto/CryptoKey.idl: Added SkipVTableValidation, because validation doesn't work
        with derived classes. Corrected "usages" attribute name.

        * crypto/CryptoKeyFormat.h: Added. 
        * crypto/CryptoKeyType.h: Added.
        * crypto/CryptoKeyUsage.h: Added.
        Added enums used by CryptoKey.

2013-10-29  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Adding Nix files in Source/Platform to trunk
        https://bugs.webkit.org/show_bug.cgi?id=118331

        Reviewed by Benjamin Poulain.

        Add Nix WebAudio implementation that just forward some calls to our API.
        This patch is part of the upstream process, tests will be landed by other patches.

        * platform/audio/nix/AudioBusNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.h: Added.
        * platform/audio/nix/FFTFrameNix.cpp: Added.
        * platform/nix/support/MultiChannelPCMData.cpp: Added.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface::Transaction.
        https://bugs.webkit.org/show_bug.cgi?id=123475

        Reviewed by Tim Horton.

        Currently it's using IDBBackingStoreLevelDB::Transaction, which hinders the goal of:
        https://bugs.webkit.org/show_bug.cgi?id=123449 - IDBTransactionBackend should be cross platform

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseMetaData):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-29  Dean Jackson  <dino@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reinstate the LGPL license. I incorrectly told Myles to
        use another license on these new files.

        * rendering/TextPainter.cpp:
        * rendering/TextPainter.h:

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reviewed by Dean Jackson.

        Implementing text-decoration-skip: ink requires drawing text
        twice (once regularly, and once with a thick outline into a mask).
        This patch pulls out the relevant text drawing code from
        InlineTextBox into a new class, called TextPainter, which can be re-used
        to draw text multiple times.

        Because there should be no observable difference, no tests need to be updated.

        * CMakeLists.txt: Adding new TextPainter class
        * GNUmakefile.list.am: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj.filters: Adding new TextPainter
        class
        * WebCore.xcodeproj/project.pbxproj: Adding new TextPainter class
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Moving text drawing code from
        this function
        * rendering/RenderingAllInOne.cpp: Adding new TextPainter class
        * rendering/TextPainter.cpp: Added.
        (WebCore::TextPainter::TextPainter):
        (WebCore::drawTextOrEmphasisMarks):
        (WebCore::paintTextWithShadows):
        (WebCore::rotation):
        (WebCore::TextPainter::paintText): New location for text drawing
        code
        (WebCore::TextPainter::paintTextInContext):
        * rendering/TextPainter.h: Added.
        (WebCore::SavedDrawingStateForMask::SavedDrawingStateForMask):
        (WebCore::TextPainter::boxRect):

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Build fix after 158223; make TileController use float for scales.

        This matches what we do in other places, and fixes the constant
        issue with exporting symbols that include CGFloat.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::scale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setScale):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Try to keep MSVC happy.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        More correct build fix after 158223.

        Only fails in release because it's inline.

        * WebCore.exp.in:

2013-10-29  Antti Koivisto  <antti@apple.com>

        Use left/right instead of left/width for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=123465

        Reviewed by Andreas Kling.

        This simplifies the code a bit.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Try fixing the Mac build (though I have no idea why
        this wouldn't fail locally)...

        * WebCore.exp.in:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support tiled drawing and use it for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=123422

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-10-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac MediaStream] implement AVFoundation backed MediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=123316

        Reviewed by Jer Noble

        No new tests, existing tests updated.

        * CMakeLists.txt: Add MediaStreamSourceStates.cpp.

        * Modules/mediastream/MediaSourceStates.cpp:
        (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates.
        (WebCore::MediaSourceStates::sourceType): Ditto.
        (WebCore::MediaSourceStates::facingMode): Ditto.
        * Modules/mediastream/MediaSourceStates.h: Ditto.
        * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addRemoteSource):
        (WebCore::MediaStream::removeRemoteSource):

        * Modules/mediastream/MediaStreamCapabilities.cpp:
        (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates
        (WebCore::MediaStreamCapabilities::facingMode): Ditto.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the
            private track do that. Change private track parameter to ref because it can't be NULL.
        (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
        (WebCore::MediaStreamTrack::setSource): Pass through to private track.
        (WebCore::MediaStreamTrack::stopped): Ditto.
        (WebCore::MediaStreamTrack::states): Ditto.
        (WebCore::MediaStreamTrack::capabilities): Ditto.
        (WebCore::MediaStreamTrack::applyConstraints): Ditto.
        (WebCore::MediaStreamTrack::stopProducingData): Ditto.
        (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't
            schedule an 'ended' event if called as a side effect of the stop() method having been
            called as per spec.
        (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged.
        (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged.
        (WebCore::MediaStreamTrack::stop): Pass through to private track.
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * bindings/js/JSMediaSourceStatesCustom.cpp:
        (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode
            is Unknown.

        * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and
            undefined method prototype.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None.
        (WebCore::MediaStreamDescriptor::removeSource): Ditto.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes
            to Live, stopProducingData when it changes to Ended.
        (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers.
        (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers
            are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled.
        (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have
            stopped, the spec says that track.stop() should permanently stop the track's source.
        * platform/mediastream/MediaStreamSource.h:
        (WebCore::MediaStreamSource::name): Make virtual so derived classes can override.
        (WebCore::MediaStreamSource::setName): Ditto.
        (WebCore::MediaStreamSource::readyState): Ditto.
        (WebCore::MediaStreamSource::enabled): Ditto.
        (WebCore::MediaStreamSource::muted): Ditto.
        (WebCore::MediaStreamSource::setReadonly): Ditto.
        (WebCore::MediaStreamSource::remote): Ditto.
        (WebCore::MediaStreamSource::setRemote): Ditto.
        (WebCore::MediaStreamSource::startProducingData): Added.
        (WebCore::MediaStreamSource::stopProducingData): Added.

        * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to
            its own file.

        * platform/mediastream/MediaStreamSourceStates.cpp: Added.
        (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the 
            strings are available to platform code.
        (WebCore::MediaStreamSourceStates::sourceType): Ditto.
        * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr.
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables.
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer.
        (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer.
        (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client.
        (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source.
        (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged.
        (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source.
        (WebCore::MediaStreamTrackPrivate::states): Ditto.
        (WebCore::MediaStreamTrackPrivate::type): Ditto.
        (WebCore::MediaStreamTrackPrivate::capabilities): Ditto.
        (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes.
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query.
        (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/mac/AVAudioCaptureSource.h: Added.
        * platform/mediastream/mac/AVAudioCaptureSource.mm: Added.

        * platform/mediastream/mac/AVCaptureDeviceManager.h: Added.
        * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added.

        * platform/mediastream/mac/AVMediaCaptureSource.h: Added.
        * platform/mediastream/mac/AVMediaCaptureSource.mm: Added.

        * platform/mediastream/mac/AVVideoCaptureSource.h: Added.
        * platform/mediastream/mac/AVVideoCaptureSource.mm: Added.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement.
        (WebCore::MediaStreamCenterMac::createMediaStream): Ditto.
        (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto.

        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes.
        (WebCore::MockMediaStreamCenter::createMediaStream):

2013-10-29  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Layout error when the shape has negative top coordinate and it's applied on the second region
        <https://webkit.org/b/123346>

        Reviewed by David Hyatt.

        We have a layout error when there is a shape applied on the second region, and it has a negative 'top' coordinate.
        Since shapeInsideInfo::shapeLogicalTop() can return negative numbers, we need to check for it, when we're positioning
        the first line in the region.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-with-negative-shape-top.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by NOBODY (My bad, non-reviewed, non-building code got in there)

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls): Remove the auto line I was trying from review feedback.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by Andreas Kling.

        This involves:
        - Splitting out IDBTransactionBackendLevelDB::Operation into its own header
        - Splitting out IDBDatabaseBackendImpl::PendingOpenCall into its own header
        - Reworking the LevelDB Operations to handle the base class IDBTransactionBackendInterface
        - Adding virtual methods in a few of the *Interface classes to support the above

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCallbacks.h:

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBOperation.h: Added.
        (WebCore::IDBOperation::~IDBOperation):

        * Modules/indexeddb/IDBPendingOpenCall.h: Added.
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::callbacks):
        (WebCore::IDBPendingOpenCall::databaseCallbacks):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::transactionId):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::scheduleTask):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a variable size object
        https://bugs.webkit.org/show_bug.cgi?id=123459

        Reviewed by Andreas Kling.

        Less memory, less indirection.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::end):

2013-10-29  Andreas Kling  <akling@apple.com>

        RenderObject::outlineStyleForRepaint() should return a reference.
        <https://webkit.org/b/123453>

        Kill a FIXME and make outlineStyleForRepaint() return a RenderStyle&.

        Reviewed by Antti Koivisto.

2013-10-29  Andreas Kling  <akling@apple.com>

        Move more of SVG resources cache to using RenderElement.
        <https://webkit.org/b/123452>

        Make some more RenderSVGResourcesCache methods take RenderElement&
        instead of RenderObject*.

        Also removed a double hash lookup in removeResourcesFromRenderer().

        Reviewed by Antti Koivisto.

2013-10-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old Inspector.json version files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123426

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector-0.1.json: Removed.
        * inspector/Inspector-1.0.json: Removed.
        * inspector/generate-inspector-protocol-version: Removed.

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] DOM bindings documentation errors
        https://bugs.webkit.org/show_bug.cgi?id=123448

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.h: Basic documentation for
        return types.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Generate Returns documentation tag for
        non-void return types and provide basic documentation.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        Reset tests results.
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-24  Brent Fulgham  <bfulgham@apple.com>

        Invalid cast in WebCore::toRenderMathMLBlock
        https://bugs.webkit.org/show_bug.cgi?id=121728
        rdar://problem/15046151

        Reviewed by Dean Jackson.

        Tested by: mathml/arbitrary-markup.html

        * dom/Element.h: Expose childShouldCreateRenderer for
        MathML as well as SVG builds.
        * dom/Node.h: 
        (WebCore::Node::isMathMLElement): Added.
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::create): Create as MathML Element.
        (WebCore::MathMLElement::childShouldCreateRenderer):
        Only allow the child to emit a renderer if it is a
        MathML element.
        * mathml/MathMLElement.h:

2013-10-29  Andreas Kling  <akling@apple.com>

        SVG: applyStrokeStyleToContext should take a RenderElement&.
        <https://webkit.org/b/123447>

        ..and a RenderStyle& too, for that matter.

        Reviewed by Anders Carlsson.

        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):

            Have this take a RenderElement& and RenderStyle& instead of
            raw pointers. Tweaked a silly-looking loop.

        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGShape.cpp:

            Moved BoundingRectStrokeStyleApplier helper class into the
            cpp file since it wasn't being used anywhere else.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):

            Remove ampersands.

2013-10-29  Antti Koivisto  <antti@apple.com>

        Multiple runs per line on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=123446

        Reviewed by Andreas Kling.

        By allowing multiple runs per line we can support text flows with consecutive whitespaces in the middle.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Remove space test.
            The improved test coverage found a few more cases that we need to disallow.

        (WebCore::SimpleLineLayout::adjustRunOffsets):
            
            Round the run positions and widths so they match line boxes.
            Adjust for text-align.

        (WebCore::SimpleLineLayout::create):
        
            Split lines with consecutive spaces into runs.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::resolver):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Run::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        
            Removed unnecessary operators.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::simpleRun):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        
            Resolver -> RunResolver

        (WebCore::SimpleLineLayout::LineResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::LineResolver):
        (WebCore::SimpleLineLayout::LineResolver::begin):
        (WebCore::SimpleLineLayout::LineResolver::end):
        
            Add LineResolver around RunResolver. It resolves the line rectangles.

        (WebCore::SimpleLineLayout::runResolver):
        (WebCore::SimpleLineLayout::lineResolver):

2013-10-29  Chris Fleizach  <cfleizach@apple.com>

        AX: elements with explicit tabindex should expose AXFocused as writable, since mouse clicks can focus it
        https://bugs.webkit.org/show_bug.cgi?id=121335

        Reviewed by Mario Sanchez Prada.

        Re-order logic that determines if a <span> should appear as an accessible element. 
        The change is that if an element canSetFocus() it should always be in the AX tree.

        Test: accessibility/tabindex-elements-are-accessible.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable media-stream in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=123144

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add new MediaStream files to the GTK port build.

2013-10-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Webkit does not expose AXRequired on input type=file
        https://bugs.webkit.org/show_bug.cgi?id=123376

        Reviewed by Mario Sanchez Prada.

        File upload buttons should expose AXRequired, since they take an input state.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute):
        (WebCore::AccessibilityNodeObject::alternativeText):

2013-10-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        Re-enable simple line layout for EFL
        https://bugs.webkit.org/show_bug.cgi?id=123402

        Reviewed by Antti Koivisto.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for EFL port, so the port
        can use the simple line layout.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, follow-up to r158185. Export the required symbol.
        This should fix the Mac debug build.

        * WebCore.exp.in:

2013-10-29  Santosh Mahto  <santosh.ma@samsung.com>

        Text selected with double-click gets unselected after DOM modification
        https://bugs.webkit.org/show_bug.cgi?id=114227

        Reviewed by Ryosuke Niwa.

        Before this patch when selection is done by double-click (start and base remain
        same) and DOM is modified then selection gets vanished. This does not
        happen when selection is done by dragging mouse. This happens because
        on double-click base and extent remain the same and on DOM
        modification we update the selection with base and extent, so we loose
        the selection. Since in double-click case start/end contain the
        correct selection, same should be used after dom modification to
        update selection.

        Test: editing/selection/double-click-selection-with-dom-mutation.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced): use start/end to update
        selection in case double click selection. Added a check for base !=
        extent, if base != extent use base/extent to update the selection
        otherwise use start/end with directionality check.

2013-10-29  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Display anonymous regions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=122963

        Reviewed by Alexandru Chiculita.

        After https://bugs.webkit.org/show_bug.cgi?id=119135, css regions are modelled using an anonymous
        RenderNamedFlowFragment object inside the block having a valid -webkit-flow-from.
        This patch changes the way elements | pseudo-elements with -webkit-flow-from are displayed
        in test dumps.

        Before:
            RenderRegion {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
        After:
            RenderBlock (positioned) {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
                RenderNamedFlowFragment at (1,1) size 50x50

        Before:
            Flow Threads
                Thread with flow-name 'article'
                Regions for flow 'article'
                    RenderRegion {DIV} #region_1
                    RenderRegion {DIV} #region_2
        After:
            Named flows
                Named flow 'article'
                Regions for named flow 'article'
                    RenderNamedFlowFragment (anonymous child of {DIV::before} #region_1)
                    RenderNamedFlowFragment (anonymous child of {DIV} #region_2)

        Changed existing tests based on the new dumps.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::renderName):
        * rendering/RenderNamedFlowFragment.h: Add a comment explaining the purpose of the class.
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList): Adjust function to display info for anonymous regions too.
        (WebCore::writeRenderNamedFlowThreads): Separate dump of valid and invalid regions for a named flow.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Move writeIndent, overloaded << operators from RenderTreeAsText to TextStream
        https://bugs.webkit.org/show_bug.cgi?id=116012

        Reviewed by Simon Fraser.

        The writeIndent method and overloaded << operators for writing out vectors and points and rectangles
        of various types are not specific to the render tree nor do they depend on any rendering-specific interface.

        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode): Remove the writeIndent declaration, it's functionally the same as the TextStream method.
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): Ditto.
        * platform/graphics/filters/DistantLightSource.cpp: Remove the RenderTreeAsText.h inclusion or replace it with
        the inclusion of the TextStream.h header where required. The writeIndent method is now declared there.
        * platform/graphics/filters/FEBlend.cpp: Ditto.
        * platform/graphics/filters/FEColorMatrix.cpp: Ditto.
        * platform/graphics/filters/FEComponentTransfer.cpp: Ditto.
        * platform/graphics/filters/FEComposite.cpp: Ditto.
        * platform/graphics/filters/FEConvolveMatrix.cpp: Ditto.
        * platform/graphics/filters/FECustomFilter.cpp: Ditto.
        * platform/graphics/filters/FEDiffuseLighting.cpp: Ditto.
        * platform/graphics/filters/FEDisplacementMap.cpp: Ditto.
        * platform/graphics/filters/FEDropShadow.cpp: Ditto.
        * platform/graphics/filters/FEFlood.cpp: Ditto.
        * platform/graphics/filters/FEGaussianBlur.cpp: Ditto.
        * platform/graphics/filters/FEMerge.cpp: Ditto.
        * platform/graphics/filters/FEMorphology.cpp: Ditto.
        * platform/graphics/filters/FEOffset.cpp: Ditto.
        * platform/graphics/filters/FESpecularLighting.cpp: Ditto.
        * platform/graphics/filters/FETurbulence.cpp: Ditto.
        * platform/graphics/filters/SourceAlpha.cpp: Ditto.
        * platform/graphics/filters/SourceGraphic.cpp: Ditto.
        * platform/text/TextStream.cpp: Move the writeIndent and operators' definitions here.
        (WebCore::operator<<):
        (WebCore):
        (WebCore::writeIndent):
        * platform/text/TextStream.h: Move the writeIndent and operators' declarations here.
        (WebCore):
        (TextStream):
        (WebCore::TextStream::operator<<):
        * rendering/RenderTreeAsText.cpp: Move the writeIndent and operators' definitions into TextStream.
        (WebCore):
        * rendering/RenderTreeAsText.h: Move the writeIndent and operators' declarations into TextStream.
        (WebCore):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Clean up ScopedEventQueue
        https://bugs.webkit.org/show_bug.cgi?id=123408

        Reviewed by Darin Adler.

        Clean up the ScopedEventQueue implementation. ScopedEventQueue::instance() should return a reference to a
        NeverDestroyed<ScopedEventQueue> object. The static ScopedEventQueue::s_instance pointer is removed.

        The ScopedEventQueue destructor, the dispatchAllEvents method and the scope level incrementation/decrementation
        methods are made private. NeverDestroyed<ScopedEventQueue> and EventQueueScope are made friends of the
        ScopedEventQueue class so they can access the constructor and the incrementation/decrementation methods, respectively.

        ScopedEventQueue method definitions are reordered to follow the order of their declarations in the header file.
        ScopedEventQueue::dispatchAllEvents() now uses std::move to efficiently dispatch and clear all currently queued events.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchScopedEvent):
        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::instance):
        (WebCore::ScopedEventQueue::dispatchAllEvents):
        * dom/ScopedEventQueue.h:
        (WebCore::EventQueueScope::EventQueueScope):
        (WebCore::EventQueueScope::~EventQueueScope):

2013-10-28  Andreas Kling  <akling@apple.com>

        applyTextTransform() should take a const RenderStyle&.
        <https://webkit.org/b/123434>

        This function is always called with an existing RenderStyle object.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderSVGResource::applyResource() should take a const RenderStyle&.
        <https://webkit.org/b/123433>

        These functions are always called with an existing RenderStyle object
        so let them take a const reference instead of a raw pointer.
        Also sprinkled some missing OVERRIDEs.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        Remove unused RenderTextControl::textBaseStyle().
        <https://webkit.org/b/123432>

        Reviewed by Anders Carlsson.

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        HTML input type objects should be managed through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123160

        Reviewed by Darin Adler.

        Make the constructors of the InputType subclasses public. This makes it possible to use std::make_unique on these classes
        and makes the T::create() helpers redundant. New instances of these classes are now managed through std::unique_ptr.

        InputType::create() now uses a NeverDestroyed InputTypeFactoryMap that maps type names to InputTypeFactoryFunctions and
        gets populated when the method is first called and the map is still empty. Certain types are not added to the factory map
        if they're disabled at runtime.

        The factory is used to create the new InputType object if the requested type was found in the map, and TextInputType is used otherwise.

        * html/ButtonInputType.cpp:
        * html/ButtonInputType.h:
        (WebCore::ButtonInputType::ButtonInputType):
        * html/CheckboxInputType.cpp:
        * html/CheckboxInputType.h:
        (WebCore::CheckboxInputType::CheckboxInputType):
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        (WebCore::ColorInputType::ColorInputType):
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        (WebCore::DateTimeInputType::DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * html/EmailInputType.cpp:
        * html/EmailInputType.h:
        (WebCore::EmailInputType::EmailInputType):
        * html/FileInputType.cpp:
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLInputElement.h:
        * html/HiddenInputType.cpp:
        * html/HiddenInputType.h:
        (WebCore::HiddenInputType::HiddenInputType):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::ImageInputType):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::createInputType): A templated helper that constructs a new InputType subclass object through std::make_unique.
        (WebCore::populateInputTypeFactoryMap): Populates the passed-in map with type-createInputType<T> pairs.
        (WebCore::InputType::create): Get the InputTypeFactoryFunction for the specified type, or fall back to TextInputType.
        (WebCore::InputType::createText):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):
        * html/NumberInputType.cpp:
        * html/NumberInputType.h:
        (WebCore::NumberInputType::NumberInputType):
        * html/PasswordInputType.cpp:
        * html/PasswordInputType.h:
        (WebCore::PasswordInputType::PasswordInputType):
        * html/RadioInputType.cpp:
        * html/RadioInputType.h:
        (WebCore::RadioInputType::RadioInputType):
        * html/RangeInputType.cpp:
        * html/RangeInputType.h:
        * html/ResetInputType.cpp:
        * html/ResetInputType.h:
        (WebCore::ResetInputType::ResetInputType):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        * html/SearchInputType.h:
        * html/SubmitInputType.cpp:
        * html/SubmitInputType.h:
        (WebCore::SubmitInputType::SubmitInputType):
        * html/TelephoneInputType.cpp:
        * html/TelephoneInputType.h:
        (WebCore::TelephoneInputType::TelephoneInputType):
        * html/TextInputType.cpp:
        * html/TextInputType.h:
        (WebCore::TextInputType::TextInputType):
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/URLInputType.cpp:
        * html/URLInputType.h:
        (WebCore::URLInputType::URLInputType):
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
        (WebCore::WeekInputType::WeekInputType):

2013-10-28  Brady Eidson  <beidson@apple.com>

        Refactor IDB factory creation.
        https://bugs.webkit.org/show_bug.cgi?id=123347

        Reviewed by Andreas Kling.

        - Rework how database directory location is passed around.
        - Make (some) SecurityOrigin arguments be references instead of pointers.
        - Add two SecurityOrigin arguments to opening databases for future use.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::PageGroupIndexedDatabase):
        (WebCore::PageGroupIndexedDatabase::from):
        (WebCore::PageGroupIndexedDatabase::factoryBackend):
        * Modules/indexeddb/PageGroupIndexedDatabase.h:

        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase):
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        (WebCore::WorkerGlobalScopeIndexedDatabase::indexedDB):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::open):
        (WebCore::IDBBackingStoreLevelDB::openInMemory):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::computeFileIdentifier):
        (WebCore::computeUniqueIdentifier):
        (WebCore::IDBFactoryBackendLevelDB::IDBFactoryBackendLevelDB):
        (WebCore::IDBFactoryBackendLevelDB::getDatabaseNames):
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::openBackingStore):
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        (WebCore::IDBFactoryBackendLevelDB::create):

        * WebCore.exp.in:

        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend):
        * platform/DatabaseStrategy.h:

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::style() should return a reference.
        <https://webkit.org/b/123414>

        Now that renderers always have style, go ahead and make style()
        return a RenderStyle&.

        There are countless opportunities for further cleanup enabled by
        this change. I'm simply passing &style() in many cases where we
        can really do something nicer instead.

        Reviewed by Anders Carlsson.

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController create the appropriate PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=123418

        Reviewed by Simon Fraser.

        Add PlatformCALayer::createCompatibleLayer, which is overridden in
        each of the subclasses to create a PlatformCALayer instance of the same
        subclass. This is used in TileController to make bare PlatformCALayers
        of the correct type (Mac, Win, or Remote).

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add createCompatibleLayer and implement it in the subclasses.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tiledScrollingIndicatorLayer):
        (WebCore::TileController::createTileLayer):
        Make use of createCompatibleLayer when creating PlatformCALayers.

2013-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Add protocol API to expose content nodes addition/removal
        https://bugs.webkit.org/show_bug.cgi?id=123424

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-nodes.html

        Adding two new inspector-protocol APIs to handle the cases when new elements are
        added or removed from a named flow. These APIs will trigger even though there
        is no region associated with the named flow.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElement):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused inspector/inline-javascript-imports.py
        https://bugs.webkit.org/show_bug.cgi?id=123425

        Reviewed by Timothy Hatcher.

        * inspector/inline-javascript-imports.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused "externs" files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123427

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScriptExterns.js: Removed.
        * inspector/generate_protocol_externs.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream remaining PLATFORM(IOS) and ENABLE(REMOTE_INSPECTOR) pieces
        https://bugs.webkit.org/show_bug.cgi?id=123411

        Reviewed by Timothy Hatcher.

        Include an InspectorClient hook for when node searching is enabled / disabled.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::didSetSearchingForNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::didSetSearchingForNode):
        * inspector/InspectorOverlay.h:

2013-10-28  Benjamin Poulain  <benjamin@webkit.org>

        Rename applyPageScaleFactorInCompositor to delegatesPageScaling
        https://bugs.webkit.org/show_bug.cgi?id=123417

        Reviewed by Simon Fraser.

        * page/Frame.cpp:
        (WebCore::Frame::frameScaleFactor):
        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentScaleFactor):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * page/Settings.in:
        * platform/ScrollView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):

2013-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for -webkit-text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=123358

        Reviewed by Dean Jackson.

        Adds initial parsing support for parsing -webkit-text-decoration-skip with
        values of "none" and "ink". This work is behind the new
        ENABLE(CSS3_TEXT_DECORATION) compile-time flag.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-roundtrip.html

        * Configurations/FeatureDefines.xcconfig: Adding ENABLE(CSS3_TEXT_DECORATION)
        * css/CSSComputedStyleDeclaration.cpp: Mapping internal representation of text-decoration-skip
        to a CSSValue
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp: Actually parsing tokens
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in: adding -webkit-text-decoration-skip
        * css/CSSValueKeywords.in: adding ink
        * css/DeprecatedStyleBuilder.cpp: Mapping from CSSValue to internal representation
        (WebCore::ApplyPropertyTextDecorationSkip::valueToDecorationSkip):
        (WebCore::ApplyPropertyTextDecorationSkip::applyValue):
        (WebCore::ApplyPropertyTextDecorationSkip::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp: decoration-skip uses DeprecatedStyleBuilder
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h: Adding functions for modifying and accessing decoration-skip properties
        * rendering/style/RenderStyleConstants.h: Definition of internal representation
        * rendering/style/StyleRareInheritedData.cpp: Setting up constructors and comparators
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h: Holds actual value of internal representation

2013-10-28  Anders Carlsson  <andersca@apple.com>

        RunLoop::dispatch should take an std::function
        https://bugs.webkit.org/show_bug.cgi?id=123407

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * platform/RunLoop.cpp:
        (WebCore::RunLoop::performWork):
        (WebCore::RunLoop::dispatch):
        * platform/RunLoop.h:

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController manipulate PlatformCALayers instead of CALayers
        https://bugs.webkit.org/show_bug.cgi?id=123279

        Reviewed by Simon Fraser.

        In the interest of making TileController more platform-independent
        (so that it can be used with the remote layer tree, and maybe Windows),
        move TileController onto our PlatformCALayer abstraction instead of
        direct manipulation of CALayers.

        Some fallout from this includes getting rid of special Mac-specific
        TileController-specific CALayer subclasses, and reworking tile
        painting to work in a more generic way.

        This is a first step, and doesn't get us all the way to a platform independent
        TileController, but more patches are forthcoming.

        No new tests, just a (largeish) refactor.

        * WebCore.exp.in:
        The signature of some methods has changed.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTileLayer.*

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        Use the "isTile" key on the CALayer dictionary instead of the layer's
        class to determine if it's a tile. TileController will set this on a tile
        when it is created, for now.

        * platform/graphics/TiledBacking.h:
        tiledScrollingIndicatorLayer() should return a PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount):
        * platform/graphics/ca/PlatformCALayerClient.h:
        The PlatformCALayerClient paintContents and incrementRepaintCount callbacks
        should include the platformCALayer that caused the callback.

        * platform/graphics/ca/PlatformCALayer.h:
        Add LayerTypeSimpleLayer, which is similar to LayerTypeWebLayer
        except it just calls back its client to paint, instead of doing
        complicated things with repaint rects. This is so that TileController
        doesn't re-enter drawLayerContents when asking its GraphicsLayer
        to paint for each PlatformCALayer (it will be entering drawLayerContents
        for the first time for each layer). It also happens to be useful
        for things like the tile controller overlay, which don't need
        all that complication.

        Add LayerTypeTiledBackingTileLayer, which is used simply to distinguish
        TileController Tile layers from other LayerTypeSimpleLayers.

        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::takeLayerWithSize):
        LayerPool should operate on PlatformCALayers now.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Set the "isTile" key on the CALayer to true for TiledBackingTileLayers,
        so that the scrolling performance logging can tell a tile apart from
        any other layer, on the scrolling thread, without touching PlatformCALayers
        or the TileController or any other main-thread data structures.

        (PlatformCALayerMac::setEdgeAntialiasingMask): Added.
        * platform/graphics/ca/mac/TileController.h:
        Remove references to Objective-C classes; instead use PlatformCALayer everywhere.
        TileController is now a PlatformCALayerClient, and the layers it owns are
        all PlatformCALayers (and it is constructed with a PlatformCALayer, etc.).
        Hand in the tile debug border color as a WebCore color, instead of a CGColorRef.
        blankPixelCountForTiles() now operates on a list of PlatformLayers instead of
        WebTileLayers specifically, since WebTileLayer is gone.
        Make drawTileMapContents private because WebTileCacheMapLayer no longer exists.

        (WebCore::TileController::platformCALayerDrawsContent):
        All of the layers who have TileController as their client paint their contents.

        (WebCore::TileController::platformCALayerContentsOpaque):
        This will only be called for layers which paint via drawLayerContents,
        so it's OK that we don't special-case the debugging overlay here.

        (WebCore::TileController::owningGraphicsLayer):
        Return the GraphicsLayer that owns the TileController's main
        layer, via its conformance to PlatformCALayerClient. This is
        a bit strange (because it's not strictly a GraphicsLayer, despite
        always being so at the moment), but is done for clarity inside
        TileController itself.

        * platform/graphics/ca/mac/TileController.mm:
        Remove CALayer (WebCALayerDetails), WebTiledScrollingIndicatorLayer,
        and a bunch of includes that we don't need anymore.

        (WebCore::TileController::create):
        (WebCore::TileController::TileController):
        TileController is passed a PlatformCALayer for the tile cache root layer,
        instead of a WebTiledBackingLayer. It also creates a PlatformCALayer with
        LayerTypeLayer instead of a bare CALayer for the container layer.
        It's OK to remove the transaction because it was only used to stop
        the implicit animation, which PlatformCALayer will do for us.

        (WebCore::TileController::~TileController):
        Clear the owner of the PlatformCALayers which the TileController previously owned,
        so they don't try to call back a destroyed TileController.

        (WebCore::TileController::tileCacheLayerBoundsChanged):
        (WebCore::TileController::setNeedsDisplay):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Adjustments towards use of PlatformCALayer; we need FloatRects so we can
        pass pointers to PlatformCALayer::setNeedsDisplay.

        (WebCore::TileController::platformCALayerPaintContents):
        Replace drawLayer with platformCALayerPaintContents, which will be called
        back from our various WebSimpleLayers. If the PlatformCALayer is our
        tiled scrolling debug indicator, paint that. Otherwise, it's a tile.
        Make use of drawLayerContents() to paint the tile contents.
        Make use of drawRepaintIndicator() to paint the repaint indicator if needed.
        Move scrolling performance logging code that used to be in WebTileLayer here.

        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        (WebCore::TileController::platformCALayerShowDebugBorders):
        (WebCore::TileController::platformCALayerShowRepaintCounter):
        Forward these to the owning GraphicsLayerCA, because it will have the right answers.

        (WebCore::TileController::setScale):
        Adjustments towards use of PlatformCALayer; remove some code that Simon
        caused to be unused in 156291 but did not remove.

        (WebCore::TileController::setAcceleratesDrawing):
        (WebCore::TileController::setTilesOpaque):
        (WebCore::TileController::setVisibleRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::setTileDebugBorderWidth):
        (WebCore::TileController::setTileDebugBorderColor):
        (WebCore::TileController::bounds):
        (WebCore::TileController::blankPixelCount):
        (WebCore::TileController::blankPixelCountForTiles):
        (WebCore::queueTileForRemoval):
        (WebCore::TileController::setNeedsRevalidateTiles):
        (WebCore::TileController::ensureTilesForRect):
        (WebCore::TileController::retainedTileBackingStoreMemory):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::updateTileCoverageMap):
        Adjustments towards use of PlatformCALayer; rename backgroundColor
        to visibleRectIndicatorColor, since it's actually a border, not a background.

        (WebCore::TileController::tiledScrollingIndicatorLayer):
        Create a LayerTypeSimpleLayer PlatformCALayer for the tiled scrolling indicator.
        It will be asked to paint straightforwardly, like a CALayer would.
        Create a LayerTypeLayer PlatformCALayer for the visible rect indicator.
        It doesn't need to paint anything, so it doesn't get an owner.

        (WebCore::TileController::createTileLayer):
        When creating a new tile layer, adopt it by setting its owner.
        Otherwise, straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::platformCALayerIncrementRepaintCount):
        Manage repaint counts for tiles in TileController now.

        (WebCore::TileController::drawTileMapContents):
        Adjustments towards use of PlatformCALayer.

        * platform/graphics/ca/mac/WebTileLayer.h: Removed.
        * platform/graphics/ca/mac/WebTileLayer.mm: Removed.
        We don't need WebTileLayer anymore, tiles are now just WebSimpleLayers
        owned by TileController. Its behavior has been moved into TileController.

        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        Add createTileController: so that the WebTiledBackingLayer's owner can
        hand the TileController the PlatformCALayer for the WebTiledBackingLayer
        without propagating additional usage of PlatformCALayer::platformCALayer(),
        which we need to remove in light of the remote layer tree work.

        (-[WebTiledBackingLayer setBorderColor:]):

        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add an empty implementation of setEdgeAntialiasingMask.
        We'll probably want to implement it before adopting TileController on Windows.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerPaintContents):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerIncrementRepaintCount):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerPaintContents):
        (WebCore::LayerClient::platformCALayerIncrementRepaintCount):
        Adjust for new parameters on PlatformCALayerClient callbacks.

        * platform/graphics/mac/WebLayer.h:
        Add WebSimpleLayer, which inherits directly from CALayer, and make
        our standard WebLayer (which is used for compositing layers in web content)
        inherit from that.

        * platform/graphics/mac/WebLayer.mm:
        Move most of the behavior of WebLayer onto WebSimpleLayer, except for its
        complex painting code. That stays as an override on WebLayer.

        (WebCore::drawLayerContents):
        Use the PlatformCALayer's PlatformLayer - if it exists - to extract
        fine-grained repaint rects. If it doesn't, we'll just use the CGContext's
        clip rect as our single repaint rect.
        Rename platformLayer to platformCALayer for accuracy.
        Remove special code for CATiledLayer since we ought not use it on Mac anymore.

        (WebCore::drawRepaintIndicator):
        Factor repaint indicator code out into its own function so that TileController
        can use it. It can't be called from drawLayerContents for TileController, since
        the PlatformCALayer that TileController passes in to drawLayerContents is actually
        that of the tile cache's root layer, not the tile itself.
        Also, add a custom background color parameter so TileController can override
        the default green color with its own standard purple.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer drawInContext:]):
        Removed a param from drawLayerContents because it's trivially acquirable
        from the PlatformCALayer.

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

        Move RenderBlock functions only used by RenderBlockFlow to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=123318

        Reviewed by David Hyatt.

        * rendering/LineLayoutState.h:
        Move FloatWithRect from RenderBlock.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        Move pagination and float functions.

2013-10-28  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for order inside grid items
        https://bugs.webkit.org/show_bug.cgi?id=123208

        Reviewed by Antti Koivisto.

        Based on Blink r153457 and r153536 by <jchaffraix@chromium.org>

        Added support for sorting grid items by using -webkit-order
        property. Used OrderIterator to implement it so it had to be moved
        out of RenderFlexibleBox to be shared with RenderGrid.

        Tests: fast/css-grid-layout/grid-item-order-auto-flow-resolution.html
               fast/css-grid-layout/grid-item-order-paint-order.html

        * CMakeLists.txt: Added new file.
        * GNUmakefile.list.am: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/OrderIterator.cpp: Added. Ripped out of RenderFlexibleBox.
        (WebCore::OrderIterator::OrderIterator):
        (WebCore::OrderIterator::setOrderValues): Use std::move semantics.
        (WebCore::OrderIterator::first): Use an integer as iterator.
        (WebCore::OrderIterator::next): Ditto.
        (WebCore::OrderIterator::reset): Ditto.
        * rendering/OrderIterator.h: Added.
        (WebCore::OrderIterator::currentChild):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::paintChildren):
        * rendering/RenderGrid.h:

2013-10-28  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Methods on window.internals shouldn't pass a document.
        https://bugs.webkit.org/show_bug.cgi?id=107301

        Reviewed by Alexey Proskuryakov.

        Each 'Internals' instance is associated with a 'Document'. So, it
        is not necessary to pass a document as argument. Only nodesFromRect and
        layerTreeAsText methods were kept because, in some Layout Tests, the
        'Document' object is not the same used by Internals::contextDocument.

        * testing/Internals.cpp: Removed 'document' parameter.
        (WebCore::Internals::animationsAreSuspended):
        (WebCore::Internals::suspendAnimations):
        (WebCore::Internals::resumeAnimations):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::setScrollViewPosition):
        (WebCore::Internals::setPagination):
        (WebCore::Internals::configurationForViewport):
        (WebCore::Internals::paintControlTints):
        (WebCore::Internals::setDelegatesScrolling):
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::touchNodeAdjustedToBestClickableNode):
        (WebCore::Internals::touchPositionAdjustedToBestContextMenuNode):
        (WebCore::Internals::touchNodeAdjustedToBestContextMenuNode):
        (WebCore::Internals::bestZoomableAreaForTouchPoint):
        (WebCore::Internals::lastSpellCheckRequestSequence):
        (WebCore::Internals::lastSpellCheckProcessedSequence):
        (WebCore::Internals::wheelEventHandlerCount):
        (WebCore::Internals::touchEventHandlerCount):
        (WebCore::Internals::setBatteryStatus):
        (WebCore::Internals::setNetworkInformation):
        (WebCore::Internals::setDeviceProximity):
        (WebCore::Internals::hasSpellingMarker):
        (WebCore::Internals::hasAutocorrectedMarker):
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore::Internals::toggleOverwriteModeEnabled):
        (WebCore::Internals::consoleMessageArgumentCounts):
        (WebCore::Internals::hasGrammarMarker):
        (WebCore::Internals::numberOfScrollableAreas):
        (WebCore::Internals::isPageBoxVisible):
        (WebCore::Internals::repaintRectsAsText):
        (WebCore::Internals::scrollingStateTreeAsText):
        (WebCore::Internals::mainThreadScrollingReasons):
        (WebCore::Internals::nonFastScrollableRects):
        (WebCore::Internals::garbageCollectDocumentResources):
        (WebCore::Internals::insertAuthorCSS):
        (WebCore::Internals::insertUserCSS):
        (WebCore::Internals::shortcutIconURLs):
        (WebCore::Internals::allIconURLs):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):
        (WebCore::Internals::webkitWillEnterFullScreenForElement):
        (WebCore::Internals::webkitDidEnterFullScreenForElement):
        (WebCore::Internals::webkitWillExitFullScreenForElement):
        (WebCore::Internals::webkitDidExitFullScreenForElement):
        (WebCore::Internals::startTrackingRepaints):
        (WebCore::Internals::stopTrackingRepaints):
        (WebCore::Internals::getCurrentCursorInfo):
        * testing/Internals.h:
        (WebCore::Internals::setPagination):
        * testing/Internals.idl:

2013-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.startTime
        https://bugs.webkit.org/show_bug.cgi?id=123264

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/32583003

        startTime has been removed from the HTMLMediaElement and its use
        in the rest of components.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleRewindButtonClicked):
        (Controller.prototype.handleTimelineMouseMove):
        (Controller.prototype.updateDuration):
        (Controller.prototype.updateTime): Removed used of startTime().
        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_start_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::isBlockedOnMediaController): Removed
        use of startTime()
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed startTime()
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderThumb): Removed use of
        startTime()

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::m_style should be a Ref.
        <https://webkit.org/b/123401>

        Made RenderElement::m_style a Ref. This codifies the fact that it
        can never be null after construction.

        Removed a couple of unnecessary null checks that were exposed as
        compilation failures.

        Reviewed by Antti Koivisto.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Name all the GLib timeout sources
        https://bugs.webkit.org/show_bug.cgi?id=123229

        Reviewed by Anders Carlsson.

        Give a name to GLib timeout sources, this is helpful when
        profiling WebKitGTK applications.

        No new tests, no change in functionality.

2013-10-28  Philippe Normand  <pnormand@igalia.com>

        MediaStreamTrackPrivate's m_client uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=123403

        Reviewed by Eric Carlson.

        No new tests, no change in functionality.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        Initialize the m_client member variable.

2013-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add crypto idl files to EXTRA_DIST and remove
        css/fullscreenQuickTime.css that was removed.

2013-10-28  Antti Koivisto  <antti@apple.com>

        Prepare simple line layout to support multiple runs per line
        https://bugs.webkit.org/show_bug.cgi?id=123400

        Reviewed by Andreas Kling.

        Bunch of renaming and some refactoring for future support for text runs.

        SimpleLineLayout::Lines -> SimpleLineLayout::Layout and becomes a class instead of a typedef.
        SimpleLineLayout::Resolver::Line -> SimpleLineLayout::Resolver::Run
        SimpleLineLayout::createLines() -> SimpleLineLayout::create()
        RenderBlockFlow::simpleLines() -> RenderBlockFlow::simpleLineLayout()
        RenderText::simpleLines() -> RenderText::simpleLineLayout()
        
        Added resolver construction functions:
        
        SimpleLineLayout::runResolver()
        SimpleLineLayout::lineResolver()

2013-10-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Expose title and alternative text for links in image maps
        https://bugs.webkit.org/show_bug.cgi?id=84045

        Reviewed by Chris Fleizach.

        Change the way we decide when the title attribute should be
        used for the accessible description, by not relying in the
        titleTagShouldBeUsedInDescriptionField() helper function but
        in whether we have found a visible text for it or not.

        This actually mimics what the Mac port does and so makes possible
        to share both the layout test and its expected results.

        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityDescription): Update the method to determine
        whether the title attribute should be used for the description.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Replace 0 timeouts g_timeout_add() by g_idle_add()
        https://bugs.webkit.org/show_bug.cgi?id=123260

        Reviewed by Carlos Garcia Campos.

        A zero timeout should be equivalent to using g_idle_add_full(G_PRIORITY_DEFAULT, ...)
        without the nagging feeling that the wrong API was used.

        No new tests, no change in functionality.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Use g_idle_add() instead
        of 0-timer.
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/gtk/GtkDragAndDropHelper.cpp: Ditto.
        (WebCore::GtkDragAndDropHelper::handleDragLeave):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Re-enable simple line layout for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123388

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for the GTK port, so the port
        can use the simple line layout.

2013-10-27  Andreas Kling  <akling@apple.com>

        Fix 4 asserting SVG tests after r158097.

        RenderElement::setStyle() is, quite surprisingly, a virtual function
        with a single override in RenderSVGBlock.
        To match the old behavior, we have to rewrite the display type from
        any inline type to block instead.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle):

2013-10-27  Andreas Kling  <akling@apple.com>

        Tone down overzealous assertion from r158097.

        RenderElement::initializeStyle() really only cares that there are no
        text renderers that we should be calling styleDidChange() on.

        Tweak the code to only check that there are no text children.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle):

2013-10-27  Antti Koivisto  <antti@apple.com>

        Enable center and right text alignment for simple lines
        https://bugs.webkit.org/show_bug.cgi?id=123398

        Reviewed by Andreas Kling.

        Support text-align:center and text-align:right on simple line layout path.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            text-align:justify is still not supported.

        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::createLines):
        
            Do a rounding dance that matches the line boxes.

        * rendering/SimpleLineLayout.h:
        
            Add left position to lines.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        
            We now do rounding during layout.

        (WebCore::SimpleLineLayout::Resolver::Line::baseline):

2013-10-27  Andreas Kling  <akling@apple.com>

        Renderers should receive their style at construction.
        <https://webkit.org/b/123396>

        Pass the RenderStyle to all non-text renderer constructors.
        After construction, initializeStyle() must be called (as a stopgap
        measure) until we are able to do style-derived initialization
        without virtual function calls.

        With this change, RenderElement::m_style is never null. Subsequent
        patches will add enforcement for this and also make style() return
        a RenderStyle&.

        I'm adding three FIXME's in this patch:

            - createRendererIfNeeded() calls AnimationController to set up
              the initial style manually instead of asking RenderElement's
              setAnimatedStyle() to do it. This can probably be done in a
              nicer way, but it's not clear yet how.

            - ImageContentData::createRenderer() does a bit of unnecessary
              work. This should be easy to clean up but got too distracting
              to be part of this patch.

            - Document::createRenderTree() creates the RenderView with an
              initial dummy RenderStyle. I've done this because resolving
              the document style assumes we already have a RenderView.

        For styleWillChange() implementations to detect that they are
        reacting to the initial style, I've added a hasInitializedStyle()
        function on RenderElement. This will return false until you've
        called initializeStyle() on the renderer. This should go away
        along with initializeStyle() eventually.

        Reviewed by Antti Koivisto.

2013-10-26  Tim Horton  <timothy_horton@apple.com>

        [mac] Remove WebTiledLayer
        https://bugs.webkit.org/show_bug.cgi?id=123395

        Reviewed by Anders Carlsson.

        Mac doesn't use CATiledLayer at all anymore. We have to keep
        LayerTypeTiledLayer around for Windows, for now, but we can
        get rid of WebTiledLayer and some related Mac-specific code.

        No new tests, just removing dead code.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTiledLayer.*

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Remove synchronouslyDisplayTilesInRect, which was only used for WebTiledLayer on Mac.
        Remove WebTiledLayer instantiation and setup code.

        * platform/graphics/mac/WebTiledLayer.h: Removed.
        * platform/graphics/mac/WebTiledLayer.mm: Removed.

2013-10-26  Andreas Kling  <akling@apple.com>

        CTTE: RenderImageResourceStyleImage always has a StyleImage.
        <https://webkit.org/b/123390>

        Codify the fact that RenderImageResourceStyleImage always wraps an
        existing StyleImage object.

        Reviewed by Antti Koivisto.

2013-10-26  Antti Koivisto  <antti@apple.com>

        Revert some accidental changes.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        * css/CSSFontSelector.h:

2013-10-26  Mark Lam  <mark.lam@apple.com>

        Gardening: fixed broken build.
        https://bugs.webkit.org/show_bug.cgi?id=123354.

        * css/CSSFontSelector.h:

2013-10-26  Antti Koivisto  <antti@apple.com>

        fast/frames/seamless/seamless-nested-crash.html asserts on wk2 only
        https://bugs.webkit.org/show_bug.cgi?id=123354

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Don't enable simple line layout if the primary font is loading. The code expects
            to use the primary font metrics for all lines but those won't match the fallbacks
            when font is not loaded.

2013-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Deprecate public dispatch_event method in objects implementing EventTarget interface
        https://bugs.webkit.org/show_bug.cgi?id=123261

        Reviewed by Gustavo Noronha Silva.

        The interface function should be used instead.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetFunctionDeprecationInformation): Helper function to return the
        version when the function was deprecated and the function
        replacing the deprecated one.
        (GenerateFunction): Check if the function is deprecated to mark it
        as such in the header and API docs.
        * bindings/scripts/gobject-generate-headers.pl: Replace the unused
        WEBKIT_OBSOLETE_API macro with new macros to mark function as
        deprecated, using the glib macros so that we don't need checks for
        the platform.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-25  Mark Lam  <mark.lam@apple.com>

        DatabaseManager's ProposedDatabases need to be thread-safe.
        https://bugs.webkit.org/show_bug.cgi?id=123313.

        Reviewed by Geoffrey Garen.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream ENABLE(REMOTE_INSPECTOR) and enable on iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=123111

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:

2013-10-25  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] CORS-enabled fetch for shape image values
        https://bugs.webkit.org/show_bug.cgi?id=123114

        Reviewed by Andreas Kling.

        Access to shape images is now controlled by CORS CSS shape per
        http://dev.w3.org/csswg/css-shapes/#shape-outside-property.
        Previously shape images had to be same-origin.

        Shape image URL access is defined by the same logic that defines
        canvas tainting: same-origin and data URLs are allowed and images
        with a "Access-Control-Allow-Origin:" header that's either "*" or
        that matches the document's origin.

        A PotentiallyCrossOriginEnabled RequestOriginPolicy was added to
        ResourceLoaderOptions, to indicate that a "potentially CORS-enabled fetch"
        was to be undertaken. The CSSImageValue::cachedImage() method handles this
        option by effectively setting the "Origin:" request header (see
        updateRequestForAccessControl() in CrossOriginAccessControl.cpp).
        StyleResolver::loadPendingShapeImage() uses the new ResourceLoaderOption.

        The static ShapeInsideInfo and ShapeOutsideInfo isEnabledFor() method
        now performs the CORS check for image valued shapes. The private
        isOriginClean() method from CanvasRenderingContext2D has been moved to
        the CachedImage class so that it can be shared by the Canvas and Shape
        implementations. It checks the response headers per the CORS spec.

        Test: http/tests/security/shape-image-cors.html

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage): Handle the new ResourceLoaderOption.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingShapeImage): Set the new ResourceLoaderOption.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern): Use the CachedImage::isOriginClean().
        * loader/ResourceLoaderOptions.h: Added PotentiallyCrossOriginEnabled to RequestOriginPolicy.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isOriginClean): Migrated from CanvasRenderingContext2D.
        * loader/cache/CachedImage.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::checkImageOrigin): Do the CORS check and log an error message if neccessary.
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Call checkImageOrigin() for images.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Ditto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Fix runtime errors caused by mediasource IDL attributes.
        https://bugs.webkit.org/show_bug.cgi?id=123352

        Reviewed by Eric Carlson.

        Due to http://webkit.org/b/123178, MediaSource classes must add a GenerateIsReachable
        (and also a JSGenerateToJSObject) attribute to avoid runtime asserts and crashes.

        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediasource/WebKitMediaSource.idl:
        * Modules/mediasource/WebKitSourceBufferList.idl:

2013-10-25  Jacky Jiang  <zhajiang@blackberry.com>

        [BlackBerry] Browser crashed at PlatformGraphicsContext::addDrawLineForText() when trying to upload a video to youtube
        https://bugs.webkit.org/show_bug.cgi?id=123349

        Reviewed by George Staikos.
        Internally reviewed by George Staikos, Konrad Piascik, Eli Fidler and Arvid Nilsson.

        Browser crashed when dereferencing null PlatformGraphicsContext*.
        In FrameView::paintControlTints(), we intentionally constructed GraphicsContext
        with null PlatformGraphicsContext* and disabled painting by doing
        context.setUpdatingControlTints(true). So we should not go further in
        GraphicsContext::drawLineForText() if painting is disabled.
        Check paintingDisabled() for the other functions in PathBlackBerry.cpp
        as well; otherwise, it is likely we will crash at those places.

        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):

2013-10-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding platform implementation of MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=123301

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * Modules/mediastream/AudioStreamTrack.cpp:
        (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter.

        (WebCore::AudioStreamTrack::AudioStreamTrack):
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate
        instances to create each MediaStreamTrack of MediaStream.

        (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with
        MediaStreamTrackPrivate as parameter.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a
        MediaStreamSource.

        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::setSource): Ditto.

        (WebCore::MediaStreamTrack::id): Ditto.

        (WebCore::MediaStreamTrack::label): Ditto.

        (WebCore::MediaStreamTrack::enabled): Ditto.

        (WebCore::MediaStreamTrack::setEnabled): Ditto.

        (WebCore::MediaStreamTrack::muted): Ditto.

        (WebCore::MediaStreamTrack::readonly): Ditto.

        (WebCore::MediaStreamTrack::remote): Ditto.

        (WebCore::MediaStreamTrack::readyState): Ditto.

        (WebCore::MediaStreamTrack::states):
        (WebCore::MediaStreamTrack::capabilities):
        (WebCore::MediaStreamTrack::clone):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended): Ditto.

        (WebCore::MediaStreamTrack::sourceStateChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stopped): Ditto.

        (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event.

        (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event.

        * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient.

        (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate.
        (WebCore::MediaStreamTrack::privateTrack):
        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter.
        * Modules/mediastream/VideoStreamTrack.h:
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of
        MediaStreamDescriptor class).

        (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector

        (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams.

        (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams.

        (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams.

        (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams.

        (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor
        has.

        (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index

        (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor
        has.
        (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index
        * platform/mediastream/MediaStreamTrackPrivate.cpp: Added.
        * platform/mediastream/MediaStreamTrackPrivate.h: Added.

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with multiple regions
        <https://webkit.org/b/123210>

        Reviewed by David Hyatt.

        I simplified the determination of the next region part of updateShapeAndSegmentsForCurrentLineInFlowThread's implementation
        in order to make the code more straightforward. I also tried to avoid using regionAtBlockOffset(...) function where it's possible,
        since it's not always that reliable, what I'll will report in a separate bug.

        No new tests, covered by existing tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with the first lines
        <https://bugs.webkit.org/show_bug.cgi?id=123275>

        Reviewed by David Hyatt.

        We have a complex condition in updateShapeAndSegmentsForCurrentLineInFlowThread, which is
        adjusting the first line to the shape's top. This patch adds two boolean to make that clear.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Antti Koivisto  <antti@apple.com>

        Faster way for simple line layout to check if text has fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=123342

        Reviewed by Andreas Kling.
        
        Don't use RenderText::knownToHaveNoOverflowAndNoFallbackFonts as it is slow.

        Simple text code path test already guarantees there is no overflow. Test for fallback
        fonts explicitly.

        * platform/graphics/SimpleFontData.h:
        
            Make FINAL.

        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        
            Remove knownToHaveNoOverflowAndNoFallbackFonts() as it has no clients.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Check if all characters can be found from the primary font.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientDestroyed() should take a RenderElement&.
        <https://webkit.org/b/123339>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientLayoutChanged() should take a RenderElement&.
        <https://webkit.org/b/123336>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientStyleChanged() should take a RenderElement&.
        <https://webkit.org/b/123335>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVG: postApplyResource() should take a RenderElement&.
        <https://webkit.org/b/123334>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Antti Koivisto  <antti@apple.com>

        REGRESSION(r157950): It made many tests assert on Windows, EFL, GTK
        https://bugs.webkit.org/show_bug.cgi?id=123309

        Reviewed by Andreas Kling.

        Disable simple line layout on non-Mac plaforms for now.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: applyResource() should take a RenderElement&.
        <https://webkit.org/b/123286>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        RenderElement::styleWillChange() should pass newStyle as reference.
        <https://webkit.org/b/123332>

        When styleWillChange() is called, there is always a new style getting
        set so there's no need to handle the null style case.
        This flushed out a couple of unnecessary checks.

        Reviewed by Antti Koivisto.

2013-10-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fixes.
        https://bugs.webkit.org/show_bug.cgi?id=123269

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/win/ImageCairoWin.cpp: Added new parameter to BitmapImage::draw() calls.
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Non-SVG build broken after r157950
        https://bugs.webkit.org/show_bug.cgi?id=123328

        Reviewed by Xan Lopez.

        The isSVGInlineTest() check should be done only if SVG is enabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Jer Noble  <jer.noble@apple.com>

        [Mac] Add helper methods to convert CMTime <--> MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=123285

        Reviewed by Eric Carlson.

        Add utility methods to convert between CMTime (a rational time class) and MediaTime.
        Once there, PlatformClockCM can now vend and accept MediaTimes for currentTime.

        * platform/mac/MediaTimeMac.h:
        * platform/mac/MediaTimeMac.cpp:
        (WebCore::toMediaTime): Added conversion utility method.
        (WebCore::toCMTime): Ditto.

        * platform/mac/PlatformClockCM.h:
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::setCurrentMediaTime): Added.
        (PlatformClockCM::currentMediaTime): Added.

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Cache line layout path
        https://bugs.webkit.org/show_bug.cgi?id=123298

        Reviewed by Sam Weinig.
        
        Determining the path can be non-trivial. Avoid computing it repeatedly on relayouts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::invalidateLineLayoutPath):
        (WebCore::RenderBlock::removeChild):
        
            Invalidate the path when children change.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::styleDidChange):
        
            Invalidate the path when style changes.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):
        
            Invalidate the path when text changes.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Andreas Kling  <akling@apple.com>

        DocumentLoader::cachedResourceLoader() should return a reference.
        <https://webkit.org/b/123303>

        ..and while we're at it, make DocumentLoader::m_cachedResourceLoader
        a Ref, and have CachedResourceLoader::create return a PassRef.

        Reviewed by Sam Weinig.

2013-10-24  Anders Carlsson  <andersca@apple.com>

        Stop bringing in the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=123273

        Reviewed by Andreas Kling.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::startGrain):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        (WebCore::AudioScheduledSourceNode::stop):
        * Modules/webaudio/AudioSummingJunction.cpp:
        * Modules/webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::process):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        * Modules/webaudio/OscillatorNode.cpp:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::dopplerRate):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::saturateAdd):
        * Modules/websockets/WebSocketChannel.cpp:
        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::WebSocketFrame::parseFrame):
        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGridCell.cpp:
        * accessibility/AccessibilityARIAGridRow.cpp:
        * accessibility/AccessibilityList.cpp:
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableCell.cpp:
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::setTimeout):
        (WebCore::setMaximumAge):
        * bindings/js/ScriptController.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::readString):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontFace):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        * css/CSSReflectValue.cpp:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontSize::applyValue):
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/SVGCSSParser.cpp:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::viewportPercentageValue):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        (WebCore::Document::minimumLayoutDelay):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/Range.cpp:
        (WebCore::Range::toString):
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        * dom/Text.cpp:
        * dom/ViewportArguments.cpp:
        (WebCore::clampLengthValue):
        (WebCore::clampScaleValue):
        (WebCore::ViewportArguments::resolve):
        (WebCore::computeMinimumScaleFactorForContentContained):
        (WebCore::restrictMinimumScaleFactorToViewportSize):
        * editing/AlternativeTextController.cpp:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::compositionRange):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::CharacterIterator::string):
        (WebCore::SearchBuffer::SearchBuffer):
        (WebCore::SearchBuffer::append):
        (WebCore::SearchBuffer::prependContext):
        (WebCore::SearchBuffer::search):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveResponse):
        (WebCore::FileReaderLoader::didReceiveData):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        * history/PageCache.cpp:
        (WebCore::PageCache::setCapacity):
        * html/BaseDateAndTimeInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::parseColorStringWithCrazyLegacyRules):
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getTextFieldValues):
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::textTrackAddCue):
        (WebCore::HTMLMediaElement::textTrackRemoveCue):
        (WebCore::HTMLMediaElement::rewind):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::duration):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        * html/HTMLSourceElement.cpp:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::colSpan):
        (WebCore::HTMLTableCellElement::rowSpan):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionStart):
        (WebCore::HTMLTextFormControlElement::setSelectionEnd):
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        * html/HTMLTrackElement.cpp:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::scale):
        * html/InputType.cpp:
        (WebCore::InputType::valueAsDouble):
        * html/MediaController.cpp:
        (MediaController::duration):
        (MediaController::currentTime):
        (MediaController::setCurrentTime):
        (MediaController::updateReadyState):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::setValueAsDouble):
        (WebCore::NumberInputType::setValueAsDecimal):
        (WebCore::NumberInputType::createStepRange):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::startSearchEventTimer):
        * html/StepRange.cpp:
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::parseStep):
        * html/TimeRanges.cpp:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::adjustBubblePosition):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * inspector/ContentSearchUtils.cpp:
        * inspector/DOMEditor.cpp:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        * inspector/InjectedScriptHost.cpp:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/cache/CachedImage.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * page/EventHandler.cpp:
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        * page/FrameTree.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustedDeferredRepaintDelay):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computeAutomaticScaleFactor):
        * page/SpatialNavigation.cpp:
        (WebCore::entryAndExitPointsForDirection):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::uniteEvenIfEmpty):
        (WebCore::FloatRect::extend):
        (WebCore::FloatRect::fitToPoints):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        (WebCore::GlyphPageTreeNode::getChild):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::intersect):
        (WebCore::IntRect::unite):
        (WebCore::IntRect::uniteIfNonZero):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::LayoutRect::intersect):
        (WebCore::LayoutRect::unite):
        (WebCore::LayoutRect::uniteIfNonZero):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/text/TextCodecICU.cpp:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::availableLogicalWidthForContent):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::layoutSpecialExcludedChild):
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::selectionHeight):
        (WebCore::RootInlineBox::selectionHeightAdjustedForPrecedingBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::fontSizeForKeyword):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTime):

2013-10-24  Andreas Kling  <akling@apple.com>

        Uncomplicate some of SVGTextRunRenderingContext.
        <https://webkit.org/b/123294>

        This class was weird about a few things, so I've taken these steps
        to clear things up:

        - FINAL and OVERRIDE all the things.
        - Constructor now takes a RenderObject&.
        - renderer() now returns a RenderObject&.
        - drawSVGGlyphs() no longer takes a TextRun.
        - glyphDataForCharacter() no longer takes a TextRun.

        To expand on the last two, there was also some awkward hoop-jumping
        where we'd go through the TextRun passed by argument to find its
        rendering context, which was really just |this| all along.

        Reviewed by Antti Koivisto.

2013-10-24  Roger Fong  <roger_fong@apple.com>

        Add texture level dependent size checks to textureImage2D calls.
        https://bugs.webkit.org/show_bug.cgi?id=123290
        <rdar://problem/15201382>

        Reviewed by Dean Jackson

        Test covered by WebGL Conformance suite 1.0.2 test, textures/texture-size-limit.html.

        There are different size limits when calling textureImage2D on different texture levels.
        We should be throwing an error if our texture size exceeds these limits.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):

2013-10-24  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream API] allow a stream source to be shared
        https://bugs.webkit.org/show_bug.cgi?id=121954

        Reviewed by Eric Carlson.

        Now, the MediaStreamSource don't know about the MediaStream that owns it,
        since there can be more than one MediaStream that has it as source for some track.
        MediaStreamTrack classes now have observers registered, in case there are more than
        one MediaStream owning that track

        No new tests, no change in functionality.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Adding the MediaStream as an observer for each track it owns.

        (WebCore::MediaStream::addTrack): Now adding the MediaStream as an observer the new added track
        and adding the source to the MediaStreamDescriptor.

        (WebCore::MediaStream::removeTrack): Instead of removing the source right away, we first check if
        there isn't any other track using that source, if not we remove the source.

        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::addRemoteSource): MediaStreamSource has no information about the MediaStream
        that uses it, so now we don't set the stream in the source anymore.

        (WebCore::MediaStream::removeRemoteSource): There can be more than on track using the source. So we
        get each track that is using the source and then remove it and fire the ended event.

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::addObserver):
        (WebCore::MediaStreamTrack::removeObserver):
        (WebCore::MediaStreamTrack::trackDidEnd): Does not get the client from the MediaStreamDescriptor, it now
        notify each of its observers that the track ended.

        * Modules/mediastream/MediaStreamTrack.h: Adding Observer class.

        * platform/mediastream/MediaStreamDescriptor.cpp: Destructor now does nothing. Previously it was setting
        each MediaStreamSource's descriptor to null.

        (WebCore::MediaStreamDescriptor::removeSource): Not setting the stream in source anymore.

        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Ditto.

        (WebCore::MediaStreamDescriptor::setEnded): Not setting the state of the source to Ended

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::~MediaStreamDescriptor):
        * platform/mediastream/MediaStreamSource.cpp: Removing references to MediaStream object
        (WebCore::MediaStreamSource::MediaStreamSource):
        (WebCore::MediaStreamSource::reset):
        * platform/mediastream/MediaStreamSource.h:

2013-10-24  Daniel Bates  <dabates@apple.com>

        Crash in WebCore::NavigationScheduler::startTimer()
        https://bugs.webkit.org/show_bug.cgi?id=123288
        <rdar://problem/14055644>

        Reviewed by Alexey Proskuryakov.

        Currently NavigationScheduler::startTimer() synchronously notifies the client
        before the Web Inspector of a scheduled redirect. If a client cancels this
        redirect then NavigationScheduler::m_redirect will become null and we'll
        subsequently crash when informing the Web Inspector of this formerly scheduled
        redirect. Instead, NavigationScheduler::startTimer() should notify the Web
        Inspector before it notifies the client of a scheduled redirect.

        As a side benefit of this change, the Web Inspector is notified of a scheduled
        redirect before being notified of it being canceled when a client chooses to cancel
        a scheduled redirect.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::startTimer):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Try to fix build without CSS_SHAPES.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=122458

        Reviewed by Darin Adler.

        Line box based inline layout is powerful but also rather slow and memory intensive. Simple line layout
        is a compact alternative data structure and fast code path to cover common cases without requiring line
        boxes.
        
        This patch handles a case single left-aligned text renderer inside flow with no floats. Even this very basic
        case is sufficiently common to handle up to 25% of all text lines on some popular new sites. The decision
        which path to use is made per block flow (paragraph).
        
        Simple line layout aims to produce pixel-exact rendering result when compared to the line box layout.
        
        The goal is to handle everything that requires line level access in cases that allow use of simple lines.
        This is not quite the case yet. For example selections and outline painting are not supported. In these
        cases we seamlessly switch to the line boxes.

        The simple line data structure currently uses 12 bytes per line. Lineboxes take ~160 bytes minimum per line.
        Laying out the lines is also several times faster as is iterating over them.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::getInlineBoxAndOffset):
        
            Creating positions within a simple line flow causes switch to line boxes.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        
            TextIterator traverses line boxes if available. In case simple line case we need to replicate the
            same results (for compatibility but especially to avoid changing test results). This is done here
            by just traversing the string without actually using the layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        
            Select the layout path to use.

        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::firstLineBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::clearTruncation):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::hasLines):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        
            Do simple layout.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        
            This function switches from simple lines to line boxes. The switching can be done outside normal layout.
            This is used to cover some cases that are not yet supported by simple lines (like selections).

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::simpleLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        
            Rename the line box layout function.

        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::knownToHaveNoOverflowAndNoFallbackFonts):
        (WebCore::RenderText::setSelectionState):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::ensureLineBoxes):
        (WebCore::RenderText::simpleLines):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        (WebCore::RenderText::selectionRectForRepaint):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        (WebCore::RenderText::hasRenderedText):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeSimpleLine):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp: Added.
        (WebCore::SimpleLineLayout::canUseFor):
        
            This check for the cases supported by the simple line layout path.

        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::createLines):
        
            The main layout functions that breaks text to lines. It only handles the cases allowed by 
            SimpleLineLayout::canUseFor. What it handles it aims to break exactly as line box layout does.

        * rendering/SimpleLineLayout.h: Added.
        * rendering/SimpleLineLayoutFunctions.cpp: Added.
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutFunctions.h: Added.
        (WebCore::SimpleLineLayout::computeFlowHeight):
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        (WebCore::SimpleLineLayout::lineHeightFromFlow):
        
            Support functions called from RenderBlockFlow and RenderText. They are equivalent to
            similar line box functions.

        (WebCore::SimpleLineLayout::baselineFromFlow):
        * rendering/SimpleLineLayoutResolver.h: Added.
        (WebCore::SimpleLineLayout::Resolver::Line::Line):
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        (WebCore::SimpleLineLayout::Resolver::Line::baseline):
        (WebCore::SimpleLineLayout::Resolver::Line::text):
        (WebCore::SimpleLineLayout::Resolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator--):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator*):
        
            Lazy iterator for deriving line metrics. This keeps the line data structure small as
            we don't need to keep easily derived values around.

        (WebCore::SimpleLineLayout::Resolver::Resolver):
        (WebCore::SimpleLineLayout::Resolver::size):
        (WebCore::SimpleLineLayout::Resolver::begin):
        (WebCore::SimpleLineLayout::Resolver::end):
        (WebCore::SimpleLineLayout::Resolver::last):
        (WebCore::SimpleLineLayout::Resolver::operator[]):

2013-10-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Gaps between underlines in adjacent underlined text runs
        https://bugs.webkit.org/show_bug.cgi?id=123236

        Reviewed by Simon Fraser and Darin Adler.

        There are two pieces to this change. The first piece is in
        InlineTextBox::paint(). We were putting floating-point
        extents into a LayoutSize, which simply uses ints (for now),
        and then immediately converting this back to a FloatSize.
        Instead, we should be using floats throughout all of
        this code.

        In addition, inside GraphicsContext::drawLineForText(), we are
        rounding the underline to pixel boundaries so that it appears
        very crisp on the screen. However, we should round once after
        performing computations, rather than rounding twice and then
        performing computations on the rounded numbers.

        Test: fast/css3-text/css3-text-decoration/no-gap-between-two-rounded-textboxes.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Change rounding mode
            to perform computations before rounding
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Don't convert to a LayoutSize
            just to convert to a FloatSize

2013-10-24  Andreas Kling  <akling@apple.com>

        SVGRenderingContext should wrap a RenderElement.
        <https://webkit.org/b/123283>

        The SVG rendering context class is never used with text renderers
        so we can have it wrap a RenderElement for tighter code.

        Also renamed SVGRenderingContext::m_object to m_renderer.

        Reviewed by Antti Koivisto.

2013-10-24  Santosh Mahto  <santosh.ma@samsung.com>

        [contenteditable] Content after non-editable element disappears when merging lines using backspace
        https://bugs.webkit.org/show_bug.cgi?id=122748

        Reviewed by Ryosuke Niwa.

        In case of paragraph merging after deletion if second paragraph
        contains non-editable element, then content after the non-editable
        element(including non-editable element) will be removed while the
        content before the element will be merged with the first paragraph.
        This happens becasue endOfParagraphToMove calculation in merging function
        stop at editing boundary so endOfParagraphToMove becomes position just
        before non-editable content.
        With this patch now endOfParagraphToMove is calculated by skipping
        over the non-editable element.

        Test: editing/deleting/merge-paragraph-contatining-noneditable.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): use CanSkipOverEditingBoundary
        condition while calculating endOfParagraphToMove.

2013-10-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: Inspector doesn't show webkitTransitionEnd events in the timeline
        https://bugs.webkit.org/show_bug.cgi?id=123263

        Reviewed by Timothy Hatcher.

        A legacy event type is only set on an event in EventTarget::fireEventListeners(Event*)
        which is called after we used to call InspectorInstrumentation::willDispatchEvent(), the method
        that would ultimately yield the creation of a TimelineRecord for the event in the Web Inspector
        frontend, and as a result we would try to dispatch an event with an unprefixed event type to
        the frontend, which wouldn't even happen because most likely it wouldn't have listeners for this
        unprefixed type.

        We now move the call to InspectorInstrumentation::willDispatchEvent() in
        EventTarget::fireEventListeners(Event*, EventTargetData*, EventListenerVector&) such that the
        correct event type and list of listeners is used to determine what event to dispatch to the frontend.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        Remove calls to InspectorInstrumentation::willDispatchEvent() and InspectorInstrumentation::didDispatchEvent().

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        Add call to InspectorInstrumentation::willDispatchEvent() before we go through each listener and
        call InspectorInstrumentation::willHandleEvent(). Additionally, we refactor some code since we're
        getting references to the ScriptExecutionContext and Document upfront now.

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: RenderElement-ize intersectRepaintRectWithResources().
        <https://webkit.org/b/123278>

        SVGRenderSupport::intersectRepaintRectWithResources() is only ever
        called with non-text renderers so make it take RenderElement&.

        Had to tweak RenderSVGResource::resourceBoundingBox() to take the
        renderer by reference.

        Reviewed by Antti Koivisto.

2013-10-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints in sourceURL named scripts do not work
        https://bugs.webkit.org/show_bug.cgi?id=123231

        Reviewed by Timothy Hatcher.

        Remember a Script's sourceURL and sourceMappingURL. When setting a
        breakpoint by URL, check it against the sourceURL or original URL.
        If a script had a sourceURL that would have been the only URL sent
        to the frontend, so that receives priority.

        Test: inspector-protocol/debugger/setBreakpointByUrl-sourceURL.html

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add CryptoKey base class and bindings
        https://bugs.webkit.org/show_bug.cgi?id=123216

        Reviewed by Sam Weinig.

        * crypto/CryptoKey.idl: Added.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        Process the IDL.

        * WebCore.xcodeproj/project.pbxproj: Added files.

        * bindings/js/JSCryptoKeyCustom.cpp: Added.
        (WebCore::JSCryptoKey::algorithm): Use a visitor to build algorithm dictionary
        for the key.

        * crypto/CryptoAlgorithmDescriptionBuilder.cpp: Added.
        * crypto/CryptoAlgorithmDescriptionBuilder.h: Added.
        An interface for a visitor we'll use to expose CrytoKey.algorithm in bindings,
        and possibly also for storage serialization. Not complete yet, we'll need support
        for a few more simple types, and less trivially, for nested algorithms.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Added.
        * bindings/js/JSCryptoAlgorithmBuilder.h: Added.
        An implementation that builds an algorithm description dictionary for JS bindings.

        * crypto/CryptoKey.cpp: Added.
        (WebCore::CryptoKey::~CryptoKey):
        (WebCore::CryptoKey::buildAlgorithmDescription):
        * crypto/CryptoKey.h: Added.
        Added an almost empty implementation. Some of the functions that are currently
        marked as pure virtual will likely be implemented in this base class.

2013-10-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157916.
        http://trac.webkit.org/changeset/157916
        https://bugs.webkit.org/show_bug.cgi?id=123274

        Broke Layout/flexbox-lots-of-data.html on perfbot (Requested
        by ap on #webkit).

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderHashTraits::emptyValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::constructDeletedValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::isDeletedValue):
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-24  Zan Dobersek  <zdobersek@igalia.com>

        Comment in ScopedEventQueue::dispatchEvent is unnecessarily verbose
        https://bugs.webkit.org/show_bug.cgi?id=123252

        Reviewed by Darin Adler.

        Shorten the comment about the crash avoidance in ScopedEventQueue::dispatchEvent due to
        the calling convention in C++ is left unspecified. The problem was already fixed in r157219
        and later adjusted in r157401, but the comment could have been shorter and simpler in both cases.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-24  Alex Christensen  <achristensen@webkit.org>

        Removed unused ThreadSafeCoordinatedSurface and CertificateInfoCurl files.
        https://bugs.webkit.org/show_bug.cgi?id=123246

        Reviewed by Noam Rosenthal.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Removed references to ThreadSafeCoordinatedSurface and CertificateInfoCurl.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.cpp: Removed.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.h: Removed.
        * platform/network/curl/CertificateInfoCurl.cpp: Removed.

2013-10-24  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Removed Qt workaround.
        https://bugs.webkit.org/show_bug.cgi?id=123258

        Reviewed by Csaba Osztrogonác.

        No change of functionality, no new tests needed.

        !$defines case can be removed, because Qt and Android aren't in WebKit trunk,
        all ports (Mac,EFL,GTK,Windows) call this script with --defines option now

        * css/make-css-file-arrays.pl:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Remove a stray space.
        
        Not reviewed.

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

2013-10-24  Antti Koivisto  <antti@apple.com>

        Element iterator functions should take reference
        https://bugs.webkit.org/show_bug.cgi?id=123267

        Reviewed by Andreas Kling.

        The argument has to be non-null.

2013-10-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL 1.8 libraries.
        https://bugs.webkit.org/show_bug.cgi?id=123245

        Reviewed by Gyuyoung Kim.

        After fixed build break on EFL 1.8 at r138326, EFL libraries are changed
        Eo typedef and splitted header files which contain version macro.

        * platform/Widget.h: Changed Eo typedef.
        * platform/efl/EflScreenUtilities.h: Ditto.
        * platform/graphics/Image.h: Ditto.

2013-10-24  Andreas Kling  <akling@apple.com>

        RenderSVGResource: Pass RenderElement to fill/strokePaintingResource.
        <https://webkit.org/b/123242>

        We never pass text renderers to these functions, so make them take
        RenderElement instead.

        Reviewed by Anders Carlsson.

2013-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GObject bindings] Make EventTarget interface introspectable
        https://bugs.webkit.org/show_bug.cgi?id=77835

        Reviewed by Gustavo Noronha Silva.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to be
        used by GObject instrospection bindings. Instead of receving a
        GCallback, which makes the function not introspectable, they
        receive a GClosure.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener):
        (WebCore::GObjectEventListener::~GObjectEventListener):
        (WebCore::GObjectEventListener::gobjectDestroyed):
        (WebCore::GObjectEventListener::handleEvent):
        (WebCore::GObjectEventListener::operator==):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener):
        (WebCore::GObjectEventListener::removeEventListener):
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_dispatch_event):
        (webkit_dom_event_target_add_event_listener):
        (webkit_dom_event_target_remove_event_listener):
        (webkit_dom_event_target_add_event_listener_with_closure):
        (webkit_dom_event_target_remove_event_listener_with_closure):
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateEventTargetIface):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):
        (webkit_dom_test_event_target_add_event_listener):
        (webkit_dom_test_event_target_remove_event_listener):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (webkit_dom_test_node_dispatch_event):
        (webkit_dom_test_node_add_event_listener):
        (webkit_dom_test_node_remove_event_listener):

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r157823.
        FilterOperation::getOperationType() is renamed FilterOperation::type().

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::injectCachedCustomFilterPrograms):

2013-10-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports when CMAKE_BUILD_TYPE is not given.

        When CMAKE_BUILD_TYPE is empty, FIND command will be failed.

        * CMakeLists.txt:

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Integrate css3-images image-orientation with existing EXIF support
        https://bugs.webkit.org/show_bug.cgi?id=91566

        Reviewed by Beth Dakin.

        Original patch by David Barr(davidbarr@chromium.org).

        This patch passes an information of image orientation into existing EXIF support functions
        (draw() functions of image classes mainly). We need to let the functions to know the information
        in order to meet the image-orientation requirement.

        Spec: http://dev.w3.org/csswg/css-images-3/#the-image-orientation
        The css3-images module specification is at last call.

        Test: fast/css/image-orientation/image-orientation.html
        Image orientation test is to check if incorrect rotation value can be fixed with correct orientation.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::sizeRespectingOrientation):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::draw):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::draw):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        * svg/graphics/SVGImageForContainer.h:

2013-10-23  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGInlineTextBox a bit.
        <https://webkit.org/b/123238>

        Use RenderBoxModelObject& instead of generic RenderObject* in some
        places where it happens as a natural consequence of keeping the
        original return type from InlineBox::parent()->renderer().

        Reviewed by Anders Carlsson.

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce RENDER_OBJECT_TYPE_CASTS to replace manual toFoo() in child render object
        https://bugs.webkit.org/show_bug.cgi?id=123150

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, toRenderFoo() can use it for child render object.
        So, this patch introduces RENDER_OBJECT_TYPE_CASTS based on the TYPE_CASTS_BASE. This will
        generate plenty more helper functions for render object type cast.

        Some unnecessary type casts are fixed by this change.

        No new tests, no behavior changes.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Include misspelling dot gap width when centering misspelling dots
        https://bugs.webkit.org/show_bug.cgi?id=122365

        Reviewed by Simon Fraser.

        When calculating where to place the misspelling dots, we find the
        maximum number of full dots that can fit under the misspelled word,
        and then center a run of that many dots. However, when we're
        centering the run, we are only considering the size of the extra
        fractional dot that we cut off. However, the dot image has a "gap"
        of transparent pixels (which visually provide tracking for the dots)
        which visually appears to be empty space. We should take this gap
        space into consideration when centering the run of dots. We also
        should make sure that our dots start on integral pixel boundaries
        because otherwise we can't set the phase of the dot run properly.

        Test: editing/spelling/centering-misspelling-dots.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-23  Andreas Kling  <akling@apple.com>

        SVGFilterBuilder should not be ref-counted.
        <https://webkit.org/b/123222>

        These objects are singly-owned and do not need ref counting.

        Reviewed by Anders Carlsson.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Remove unused IDBBackingStoreLevelDB default constructor.

        Rubberstamped by Anders Carlsson.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Added Texture Mapper and Coordinated Graphics to Windows build for WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=123215

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added source files for Texture Mapper to Windows build.
        * WebCore.vcxproj/WebCoreCairo.props:
        Added Texture Mapper include directories for WinCairo.

2013-10-23  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding mock class to test RTCDataChannelHandler
        https://bugs.webkit.org/show_bug.cgi?id=123205

        Reviewed by Eric Carlson.

        Now RTCPeerConnectionHandler-datachannel LayouTest can run properly.
        Also updated the expected file, removing the reliable property check (which was removed in the spec)

        Existing tests updated.

        * CMakeLists.txt:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp: Added.
        * platform/mock/RTCDataChannelHandlerMock.h: Added.
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::RemoteDataChannelNotifier::RemoteDataChannelNotifier):
        (WebCore::RemoteDataChannelNotifier::fire):
        (WebCore::DataChannelStateNotifier::DataChannelStateNotifier):
        (WebCore::DataChannelStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createDataChannel):

2013-10-23  Andreas Kling  <akling@apple.com>

        Clock should not be ref-counted.
        <https://webkit.org/b/123217>

        The Clock object is only ever owned by the MediaController,
        so remove the ref counting and store it in a std::unique_ptr.

        Also slapped the Clock subclasses with FINAL and OVERRIDE.

        Reviewed by Anders Carlsson.

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Fix assertion in DatabaseManager::detailsForNameAndOrigin() to be iOS friendly.
        https://bugs.webkit.org/show_bug.cgi?id=123218.

        Reviewed by Joseph Pecoraro.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::detailsForNameAndOrigin):

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Separated USE(CA) from USE(ACCELERATED_COMPOSITING) to prepare WinCairo for accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=123214

        Reviewed by Brent Fulgham.

        * platform/graphics/PlatformLayer.h:
        Added TextureMapperPlatformLayer PlatformLayer declaration for WinCairo.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        Added USE(CA) where necessary to compile WinCairo with accelerated compositing.

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Antialias underlines if they're not axis-aligned
        https://bugs.webkit.org/show_bug.cgi?id=123004

        Reviewed by Simon Fraser.

        In order to make underlines crisp, GraphicsContext:drawLineForText
        modifies the bounds of the underline rect in order to make the rect
        device-pixel-aligned, and then turns off antialiasing when drawing
        the line. This makes sense when the underline is axis-aligned, but
        doesn't when the rect is rotated or skewed. Therefore, we should
        only opt-in to this behavior if the underline we're about to draw
        is axis-aligned. This requires figuring out whether or not the
        current transformation is axis-aligned every time
        GraphicsContext::drawLineForText is called, which will incur a small
        performance hit. However, this is justified by underlines looking
        much better (antialiased) when the context is rotated or skewed.

        Tests: svg/custom/foreign-object-skew.html
               svg/zoom/page/zoom-foreignObject.html
               svg/zoom/text/zoom-foreignObject.html:

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Re-instate ProposedDatabases needed by detailsForNameAndOrigin().
        https://bugs.webkit.org/show_bug.cgi?id=123131.

        Reviewed by Geoffrey Garen.

        Test: storage/websql/open-database-expand-quota.html

        If a webpage tries to create a database that exceeds the database size
        quota for that security origin, the WebKit1 quota request mechanism
        uses detailsForNameAndOrigin() to get the requested size of the database
        (that the webpage is attempting to open) in order to determine whether
        to increase the quota or not.

        Previously, detailsForNameAndOrigin() relies on the ProposedDatabase
        mechanism to provide this size information. This change re-instates the
        ProposedDatabase mechanism so that WebKit1 client code that relies on
        this behavior will continue to work.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::ProposedDatabase::~ProposedDatabase):
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore::DatabaseManager::ProposedDatabase::origin):
        (WebCore::DatabaseManager::ProposedDatabase::details):

2013-10-23  Tim Horton  <timothy_horton@apple.com>

        [cg] Fix the capitalization of kCGImageSourceSkipMetaData (-> Metadata)
        https://bugs.webkit.org/show_bug.cgi?id=122918

        Reviewed by Anders Carlsson.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        The capitalization of kCGImageSourceSkipMetaData changed to
        kCGImageSourceSkipMetadata in Mountain Lion.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Make IDBDatabaseBackendLevelDB.cpp be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123027

        Attentively reviewed by Dean Jackson.

        Move it out of the indexeddb/leveldb directory, and rename it to IDBDatabaseBackendImpl.

        Project files:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h.

        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore::IDBDatabaseBackendInterface::isIDBDatabaseBackendImpl): Add to support a required cast in LevelDB code.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        Define exported symbol file for armv7s and arm64.

        * Configurations/WebCore.xcconfig:

2013-10-23  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [GTK] accessibility/self-referencing-aria-labelledby.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=121594

        Reviewed by Mario Sanchez Prada.

        According to http://www.w3.org/TR/REC-html40/struct/objects.html#edef-IMG
        description of image element should be determined by alt attribute, then
        if it is empty by title attributte.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetDescription):

2013-10-15  Andreas Kling  <akling@apple.com>

        Tighten animation-driven restyle to operate on Element only.
        <https://webkit.org/b/122820>

        Text nodes are never directly animated, so we can tighten this code
        to work on Element only. This happens naturally since the code was
        already working with RenderElement everywhere.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert more of the WebCore code to use PassRef for RenderStyle
        in places where they are known to be non-null.

        Re-landing this without region styling since that caused some
        assertions last time.

        Reviewed by Antti Koivisto.

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        Refactor LineBreaker::nextSegmentBreak, add BreakingContext that holds all its state
        https://bugs.webkit.org/show_bug.cgi?id=123038

        Reviewed by David Hyatt.

        I followed Levi's logic on Blink's nextSegmentBreak refactoring (https://chromiumcodereview.appspot.com/25054004). 
        I mostly did the same changes, but the code is too diverged at this point to just apply that patch on our trunk. The patch
        introduces BreakingContext as a separate class. I added new methods for each condition, which were originally located in
        nextSegmentBreak. I also removed the goto-s from the code. All the new methods are inline in order to avoid introducing any
        performance regression. The change makes the code so much cleaner and understandable.

        This change would be the first step of the nextSegmentBreak refactoring, I wanted to keep things in place in RenderBlockLineLayout.cpp
        for now, but I'm planning to separate BreakingContext into a new file and do additional changes to make things nicer. I'm tracking
        the entire progress under http://webkit.org/b/121261 meta bug.

        No new tests, covered by existing tests.
        - I updated 1 expected result, because there was a 1 pixel difference on the result, which I believe comes from a rounding situation.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::nextCharacter):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::BreakingContext::handleEndOfLine):
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157826.
        http://trac.webkit.org/changeset/157826
        https://bugs.webkit.org/show_bug.cgi?id=123197

        Caused some regions tests to assert (Requested by smfr on
        #webkit).

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setComputedStyle):
        (WebCore::ElementRareData::resetComputedStyle):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::textWithDirection):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setStyleInternal):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        * rendering/RenderRegion.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveLocal):

2013-10-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove HAVE_GLX macro
        https://bugs.webkit.org/show_bug.cgi?id=123191

        Reviewed by Gyuyoung Kim.

        Since r138313, HAVE(GLX) was replaced to USE(GLX) except in GraphicsSurfaceToken.h.

        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Replace HAVE(GLX) to USE(GLX)

2013-10-22  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=123174.

        Not reviewed.

        No new tests.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

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

        Get rid of IDBObjectStoreBackendLevelDB
        https://bugs.webkit.org/show_bug.cgi?id=123174

        Reviewed by Tim Horton.

        This file was kind of a dumping ground.
        Its contents can be merged into IDBBackingStoreInterface and a new IDBIndexWriter class.

        Also took the opportunity to do a little bit of RefPtr<> and pointer-vs-reference cleanup.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h: Removed.

        * Modules/indexeddb/IDBIndexWriter.cpp: Added.
        (WebCore::IDBIndexWriter::IDBIndexWriter):
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h: Added.
        (WebCore::IDBIndexWriter::create):

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBMetadata.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):

2013-10-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement a software rendering option on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123177

        Reviewed by Tim Horton.

        Implement a way to force software OpenGL rendering
        for WebGL, via a Setting/Preference.

        No new tests. We intentionally hide the capabilities of
        the renderer from the content, so you can't test for
        this setting. However, manual inspection is pretty
        obvious. Just go to a page with a complex shader
        such as https://www.shadertoy.com/view/lss3WS.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): If we're forcing software
        rendering, mark the context attributes as such.
        * page/Settings.in: New setting key.
        * platform/graphics/GraphicsContext3D.h: New flag in Attributes.
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Slight update to the
        algorithm that sets a pixel format. If we're forcing software rendering,
        obviously we never want to create an accelerated pixel format.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp:
        (WebCore::CustomFilterGlobalContext::prepareContextIfNeeded): Set the attribute
        here before trying to create the context.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Add a forceSoftwareRendering
        flag to prepareContextIfNeeded.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect): Check the Setting before creating a custom
        filter context.

2013-10-22  Anders Carlsson  <andersca@apple.com>

        Revert r157445 since it broke certificates on Mac.
        <rdar://problem/15246926&15254017&15269117>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/CertificateInfoCFNet.cpp: Removed.
        * platform/network/cf/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::setCertificateChain):
        (WebCore::ResourceResponse::certificateChain):
        * platform/network/soup/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::tlsErrors):
        (WebCore::ResourceError::setTLSErrors):
        (WebCore::ResourceError::certificate):
        (WebCore::ResourceError::setCertificate):
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError):
        (WebCore::ResourceError::platformCopy):
        (WebCore::ResourceError::platformCompare):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::soupMessageCertificate):
        (WebCore::ResourceResponse::setSoupMessageCertificate):
        (WebCore::ResourceResponse::soupMessageTLSErrors):
        (WebCore::ResourceResponse::setSoupMessageTLSErrors):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        (WebCore::ResourceResponse::updateFromSoupMessage):

2013-10-22  Jer Noble  <jer.noble@apple.com>

        [Media] Refactor supportsType() factory method to take a parameters object.
        https://bugs.webkit.org/show_bug.cgi?id=122489

        Reviewed by Eric Carlson.

        In order to support adding new conditional properties with which to decide
        what MediaPlayerPrivate subclass to create, replace the two versions of the
        supportsType() factory method with a single one taking a parameters object.

        At the same time, add a 'isMediaSource' parameter to that object, allowing
        MediaPlayerPrivate subclasses which support the same type and codecs but
        which do not both support MediaSource to be distinguised.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForSupportParameters): Renamed from
            bestMediaEngineForTypeAndCodecs.
        (WebCore::MediaPlayer::nextBestMediaEngine): Added convenience function.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Call nextBestMediaEngine()
        (WebCore::MediaPlayer::supportsType): Pass parameter object.
        (WebCore::MediaPlayer::networkStateChanged): Call nextBestMediaEngine().
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType): Handle parameter object.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Handle parameter object.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Ditto.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateQTKit::supportsType): Handle parameter object.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsType): Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVGRenderBlock::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123181>

        I meant to do this one in r157787, but better late than never.

        Reviewed by Geoffrey Garen.

2013-10-22  Sam Weinig  <sam@webkit.org>

        CTTE: Modernize RenderBlock a bit
        https://bugs.webkit.org/show_bug.cgi?id=123162

        Reviewed by Andreas Kling.

        Start threading references through RenderBlock. While we 
        are here, do some selective modernization as well.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert the remaining WebCore code to use PassRef for RenderStyle
        wherever they are known to be non-null.

        Reviewed by Antti Koivisto.

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157819.
        http://trac.webkit.org/changeset/157819
        https://bugs.webkit.org/show_bug.cgi?id=123180

        Broke 32-bit builds (Requested by smfr on #webkit).

        * Configurations/WebCore.xcconfig:

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename deleteLineBoxTree to deleteLines
        https://bugs.webkit.org/show_bug.cgi?id=123176

        Reviewed by Andreas Kling.

        RenderBlock::deleteLineBoxTree -> RenderBlock::deleteLines
        RenderInline::deleteLineBoxTree -> RenderInline::deleteLines

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        {ClipPathOperation, FilterOperation}::getOperationType() should not include 'get'
        https://bugs.webkit.org/show_bug.cgi?id=123172

        Reviewed by Simon Fraser.

        No new tests, just a rename.

        "get" in WebCore tends to mean that the function has out arguments; these have no arguments.
        Rename FilterOperation::getOperationType() to FilterOperation::type().
        I noticed that ClipPathOperation had the same mistake, so I fixed it there too.

        Removed long and useless list of files.

2013-10-22  Samuel White  <samuel_white@apple.com>

        AX: Add paramAttrs to fetch start and end text markers in a given rect.
        https://bugs.webkit.org/show_bug.cgi?id=122164

        Reviewed by Chris Fleizach.

        Added ability to fetch end and start text markers inside a given bounds. This gives ScreenReaders
        like VoiceOver a way to retrieve the text markers for a specified column of page text.

        Test: platform/mac/accessibility/text-marker-for-bounds.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame):
        (WebCore::AccessibilityObject::topDocument):
        (WebCore::AccessibilityObject::visiblePositionForBounds):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper screenToContents:]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Match adjustLogicalLineTopAndLogicalHeightIfNeeded's implementation with Blink's
        https://bugs.webkit.org/show_bug.cgi?id=123033

        Reviewed by David Hyatt.

        In Blink I made this function in a bit different way. This change modifies it
        to be identical, which helps a lot in the future cross-merging patches.

        No new tests, covered by existing texts.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded):

2013-10-22  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        * Configurations/WebCore.xcconfig:

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Mavericks build; use <> for framework include.

        * page/CaptionUserPreferencesMediaAF.cpp:

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        GammaFilterOperation seems to be dead code
        https://bugs.webkit.org/show_bug.cgi?id=123173

        Reviewed by Simon Fraser.

        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        Remove dead code.

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename some line box functions to be just about lines
        https://bugs.webkit.org/show_bug.cgi?id=123168

        Reviewed by Dave Hyatt.

        firstLineBoxBaseline -> firstLineBaseline
        hasInlineBoxChildren -> hasLines
        
        Also use hasLines in a bunch of places where firstLineBox() was used.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        
            Also use hasRenderedText() instead of firstTextBox()

        * rendering/RenderFullScreen.cpp:
        
            Fix namespace.

2013-10-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding Mock class to test RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=122848

        Reviewed by Eric Carlson.

        The following tests can be run:

            RTCPeerConnection-createAnswer.html
            RTCPeerConnection-createOffer.html
            RTCPeerConnection-ice.html
            RTCPeerConnection-localDescription.html
            RTCPeerConnection-remoteDescription.html
            RTCPeerConnection-state.html

        Tests that require a MediaStream object, by invoking getUserMedia,
        are not ready to run yet.

        No new tests needed.

        * CMakeLists.txt:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::createHandler):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp: Added.
        * platform/mock/RTCNotifiersMock.h: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.h: Copied from Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h.
        * platform/mock/TimerEventBasedMock.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockRTCPeerConnectionHandler):
        * testing/Internals.h:

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        WebCore::fillWithEmptyClients adopts new empty clients before leaking their pointers
        https://bugs.webkit.org/show_bug.cgi?id=122945

        Reviewed by Anders Carlsson.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients): Store the static empty clients as NeverDestroyed, rather than
        adopting the pointer of each heap-allocated object and then immediately leaking that pointer.

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        Simplify HRTFDatabaseLoader's load map
        https://bugs.webkit.org/show_bug.cgi?id=122944

        Reviewed by Eric Carlson.

        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::loaderMap): Return a reference to a NeverDestroyed HashMap that maps sample rates to loaders.
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFDatabaseLoader.h: Remove the LoaderMap type definition, the private singleton of that type
        and the singleton's unused getter.

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support hardware accelerated filters
        https://bugs.webkit.org/show_bug.cgi?id=123139

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export a variety of filter-related things.

        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setFilters):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        (PlatformCAFilters::setFiltersOnLayer):
        setFiltersOnLayer should take a PlatformLayer instead of a PlatformCALayer
        as its argument, because it doesn't need a PlatformCALayer, and this way
        we can share code with the RemoteLayerTreeHost, which only has PlatformLayers
        and not PlatformCALayers.

2013-10-22  Brendan Long  <b.long@cablelabs.com>

        cue.text fails for some track element cues
        https://bugs.webkit.org/show_bug.cgi?id=81123

        Reviewed by Eric Carlson.

        Test: media/track/track-long-captions-file.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes): Use buffer when we don't have full lines.
        (WebCore::WebVTTParser::fileFinished): Force file to finish parsing.
        (WebCore::WebVTTParser::hasRequiredFileIdentifier): Simplify due to using String.
        (WebCore::WebVTTParser::collectCueText): Don't automatically create cues when we run out of data.
        (WebCore::WebVTTParser::collectNextLine): Use buffer.
        * html/track/WebVTTParser.h: Add m_buffer and Finished state.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished): Call m_parser->fileFinished() when done.

2013-10-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=123161

        Reviewed by Brent Fulgham.

        * rendering/RenderFlowThread.h: Move USE(ACCELERATED_COMPOSITING) guard to expose needed type.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Add a cross-platform IDBRecordIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=123138

        Reviewed by Andreas Kling.

        Add the cross-platform header:
        * Modules/indexeddb/IDBRecordIdentifier.h: Added.
        (WebCore::IDBRecordIdentifier::create):
        (WebCore::IDBRecordIdentifier::encodedPrimaryKey):
        (WebCore::IDBRecordIdentifier::version):
        (WebCore::IDBRecordIdentifier::reset):
        (WebCore::IDBRecordIdentifier::IDBRecordIdentifier):
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

        Remove the old abstract and LevelDB classes:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Use the cross-platform one everywhere:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):

2013-10-22  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Possible performance regression after r157567
        https://bugs.webkit.org/show_bug.cgi?id=123016

        Reviewed by Andreas Kling.

        The revision 157567 http://trac.webkit.org/changeset/157567 may have regressed
        Parser/html5-full-render by ~1.1% and Parser/html-parser by ~2%. These changes
        try to optimize the initial patch, based on Andreas Kling's review.

        The patch also adds a couple of refactorings that should make the code easier to read:
        - the CSS Shapes functions are now wrapped in a single #if clause
        - the CSS Shapes and CSS Regions pre-layout preparations are wrapped in a helper function

        The RenderFlowThread::logicalWidthChangedInRegionsForBlock function is optimized by passing
        it information about the state of the relayout children flag. If the flag is true already,
        some of the steps are skipped.

        Tests: no new tests.

        * dom/Element.cpp:
        (WebCore::Element::webkitGetRegionFlowRanges):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::shapeInfoRequiresRelayout):
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout):
        (WebCore::RenderBlock::computeShapeSize):
        (WebCore::RenderBlock::prepareShapesAndPaginationBeforeBlockLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderElement::isRenderNamedFlowFragmentContainer):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSStyleSheet constructor functions should return PassRef.
        <https://webkit.org/b/123156>

        Make CSSStyleSheet::create*() return PassRef and tighten some call
        sites that were using them. Most callers didn't need any tweaks to
        take advantage of PassRef.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFraction always has a MathMLInlineContainerElement.
        <https://webkit.org/b/123154>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most member functions private.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        FontGlyphs constructor functions should return PassRef.
        <https://webkit.org/b/123159>

        Made the two FontGlyphs creator functions return PassRef and tweaked
        the FontGlyphsCache in Font.cpp to make more efficient use of it.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Fix some more code to use RenderElement instead of RenderObject.
        <https://webkit.org/b/123149>

        Using RenderElement where possible lets us skip the isRenderElement()
        branch in RenderObject::style() and generates much tighter code.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVG renderers' styleWillChange() into styleDidChange().
        <https://webkit.org/b/123108>

        This work can just as well be done after setting the style.
        Three more styleWillChange() overloads gone.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSValueList constructor functions should return PassRef.
        <https://webkit.org/b/123151>

        These functions always return objects, and thus can return PassRef.
        Also made CSSValueList::createFromParserValueList() take a reference
        since that function is only ever called with a non-null value.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Avoid parent style ref churn in createTextRendererIfNeeded().
        <https://webkit.org/b/123148>

        There's no need to take a temporary ref on the parent's RenderStyle
        while creating a text renderer. It's not going away, and the text
        renderer is not going to participate in ownership afterwards.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Remove some unnecessary null checks in RenderElement::setStyle().
        <https://webkit.org/b/123146>

        After assigning the new style to RenderElement::m_style, we know that
        it'll be non-null, so remove all the checking for this.

        Reviewed by Antti Koivisto.

2013-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce ACCESSIBILITY_OBJECT_TYPE_CASTS to replace manual toFoo() in accessibility child class
        https://bugs.webkit.org/show_bug.cgi?id=123140

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, DEFINE_TYPE_CASTS can be used for toFoo() in accessibility
        child class. The DEFINE_TYPE_CASTS will generate plenty more helper functions for accessibility type cast.

        No new tests, no behavior changes.

        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:

2013-10-22  Brian Holt  <brian.holt@samsung.com>

        [GTK] Add WebKit2 API for TLS errors
        https://bugs.webkit.org/show_bug.cgi?id=120160

        Reviewed by Carlos Garcia Campos.

        Added a new constructor for CertificateInfo under Soup.

        * platform/network/CertificateInfo.h:
        * platform/network/soup/CertificateInfoSoup.cpp:
        (WebCore::CertificateInfo::CertificateInfo): New constructor using
        GTlsCertificateFlags and GTlsCertificate.

2013-10-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use RenderStyle::hasFlowFrom when needed
        https://bugs.webkit.org/show_bug.cgi?id=122543

        Reviewed by David Hyatt.

        Rename RenderStyle::hasStyleRegion -> RenderStyle::hasFlowFrom.
        Use RenderStyle::hasFlowFrom() helper function instead of directly
        checking the value of RenderStyle::regionThread().

        No change of functionality, covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didAttachRenderers):
        * dom/PseudoElement.h:
        (WebCore::pseudoElementRendererIsNeeded):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        * rendering/style/RenderStyle.h:

2013-10-21  Brent Fulgham  <bfulgham@apple.com>

        [WIN] Properly support reverse animations without needing software fallback.
        https://bugs.webkit.org/show_bug.cgi?id=85121

        Reviewed by Dean Jackson.

        Testing is provided by existing animation tests.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::createReversed): Added.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation): The early return when performing a reverse or
        autoreverse animation is no longer needed.
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction): Use new reversed function.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction): Ditto.
        (PlatformCAAnimation::setTimingFunction): Pass 'reverse' flag.
        (PlatformCAAnimation::setTimingFunctions): Ditto.

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use TYPE_CASTS_BASE for CSS_VALUE_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=123126

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE was moved to common place to be used by all toFoo().
        CSS_VALUE_TYPE_CASTS starts to use it for CSS child value. This change
        generates plenty more helper functions for toCSSFooValue().

        Additionally, this use support that toWebKitCSSFooValue, which couldn't
        use CSS_VALUE_TYPE_CASTS macro.

        No new tests, no behavior change.

        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.h:
        * css/CSSCalculationValue.h:
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontValue.h:
        * css/CSSFunctionValue.h:
        * css/CSSGradientValue.h:
        * css/CSSGridTemplateValue.h:
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.h:
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.h:
        * css/CSSShadowValue.h:
        * css/CSSTimingFunctionValue.h:
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValue.h:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h:
        * css/WebKitCSSArrayFunctionValue.h:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSMatFunctionValue.h:
        * css/WebKitCSSMixFunctionValue.h:
        * css/WebKitCSSSVGDocumentValue.h:
        * css/WebKitCSSShaderValue.h:

2013-10-21  Joone Hur  <joone.hur@intel.com>

        Bad cast with toRenderBoxModelObject in RenderBlock::updateFirstLetter()
        https://bugs.webkit.org/show_bug.cgi?id=123013

        Reviewed by Andreas Kling.

        No new tests because this was reported by Google ClusterFuzz.
        https://codereview.chromium.org/25713009/

        There is a case that toRenderBoxModelObject causes a crash in RenderBlock::updateFirstLetter() 
        due to bad cast, so we need to check whether the RenderObject is a RenderBoxModelObject 
        by running isBoxModelObject() before calling toRenderBoxModelObject.  

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

2013-10-21  Brady Eidson  <beidson@apple.com>

        Make IDBTransactionCoordinatorLevelDB cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123124

        Enthusiastically reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        Make more methods pure virtual in the interface:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        Update the name of the class, and use IDBTransactionBackendInterface instead of IDBTransactionBackendLeveDB:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp.
        (WebCore::IDBTransactionCoordinator::create):
        (WebCore::IDBTransactionCoordinator::IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::~IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::didCreateTransaction):
        (WebCore::IDBTransactionCoordinator::didStartTransaction):
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):
        (WebCore::IDBTransactionCoordinator::isActive):
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::doScopesOverlap):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBTransactionCoordinator.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.h.

        Update the name of the class elsewhere:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        (WebCore::IDBDatabaseBackendLevelDB::transactionCoordinator):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-21  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream JSGlobalObject::shouldInterruptScriptBeforeTimeout()
        https://bugs.webkit.org/show_bug.cgi?id=123045

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage): Added.
        (WebCore::JSDOMWindowBase::shouldInterruptScript): Extracted comment and assertion
        about null Page object into WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage()
        so that it can be shared by both this function and JSDOMWindowBase::shouldInterruptScriptBeforeTimeout().
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout): Added.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * loader/EmptyClients.h: Added isStopping(). We'll land the iOS chrome client implementation
        in a subsequent patch.
        * page/ChromeClient.h: Added isStopping().

2013-10-21  Anders Carlsson  <andersca@apple.com>

        Navigation policy callback not called when performing the same fragment navigation twice
        https://bugs.webkit.org/show_bug.cgi?id=123121
        <rdar://problem/15230466>

        Reviewed by Beth Dakin.

        There's code in PolicyChecker::checkNavigationPolicy that will call the decision function right away 
        if the requests are equal, without consulting any policy client. Because of this, make sure to empty out
        the last checked request of the document loader when doing a fragment navigation.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; unprotect the declaration of updateSleepDisabling();

        * html/HTMLMediaElement.h:

2013-10-20  Mark Lam  <mark.lam@apple.com>

        Avoid JSC debugger overhead unless needed.
        https://bugs.webkit.org/show_bug.cgi?id=123084.

        Reviewed by Geoffrey Garen.

        No new tests.

        - If no breakpoints are set, we now avoid calling the debug hook callbacks.
        - If no break on exception is set, we also avoid exception event debug callbacks.
        - When we return from the ScriptDebugServer to the JSC::Debugger, we may no
          longer call the debug hook callbacks if not needed. Hence, the m_currentCallFrame
          pointer in the ScriptDebugServer may become stale. To avoid this issue, before
          returning, the ScriptDebugServer will clear its m_currentCallFrame if
          needsOpDebugCallbacks() is false.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reset):

2013-10-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Grammar markers are not updated when switching between 1x and 2x
        https://bugs.webkit.org/show_bug.cgi?id=122146

        Reviewed by Dean Jackson.

        When running editing/spelling/grammar-markers-hidpi.html, the 2x
        grammar/spelling dot resources are cached. If you then run
        editing/spelling/grammar-markers.html without tearing down WebKit,
        it re-uses the 2x dots. The difference between the two tests is a call
        to testRunner.setBackingScaleFactor().

        We create a NSColor from an NSImage, and remember it in a static
        variable. However, NSColor inspects the current graphics context to
        determine which resolution to use, and then remembers that decision.
        Therefore, we want to recreate the NSColor whenever the device pixel
        ratio changes. This patch adds a new static function to GraphicsContext
        which recreates this NSColor every time the ratio changes.

        Tests: editing/spelling/grammar-markers.html
               editing/spelling/inline_spelling_markers.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::makePattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-21  Simon Fraser  <simon.fraser@apple.com>

        Use pink layer borders for compositing layers with a contents layer
        https://bugs.webkit.org/show_bug.cgi?id=123118

        Reviewed by Dean Jackson.

        With the existing layer border colors, it's not possible to distinguish an empty
        layer from one with solid color, image or video contents. So use a pink color
        for those. This makes it easier to diagnose bugs like 122784.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Limit use of display sleep assertion when <video> element is off-screen.
        https://bugs.webkit.org/show_bug.cgi?id=123041

        Reviewed by Darin Adler.

        Use page visibility changes to suspend and resume the use of sleep assertions in
        HTMLMediaElement.

        Page will propogate the page visibility change notifications to its Documents, which
        will further propogate those notifications to registered elements.  Upon receiving
        these notifications, HTMLMediaElement will release or take a DisplaySleepDisabler
        token if necessary.

        Also, rename HTMLMediaElement's updateDisableSleep() to updateSleepDisabling() and wrap
        the implementation in a PLATFORM(MAC) guard rather than at each call site.

        * dom/Document.cpp:
        (WebCore::Document::registerForVisibilityStateCallbacks): Added registration method.
        (WebCore::Document::unregisterForVisibilityStateCallbacks): Added unregistration method.
        (WebCore::Document::visibilityStateChanged): Call all registered clients.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::visibilityStateChanged): Added default virtual method to be overridden
            by subclasses.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register for the notification, and check the
            current status of Document::hidden().
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister for the notification.
        (WebCore::HTMLMediaElement::visibilityStateChanged): Set m_displaySleepDisablingSuspended
            and call updateSleepDisabling().
        (WebCore::HTMLMediaElement::shouldDisableSleep): Add a check for m_displaySleepDisablingSuspended.
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::setVisibilityState): Pass to every child document.

        Rename updateDisableSleep() -> updateSleepDisabling():
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::stop):

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        MediaStreamTrack now tracks its own state
        https://bugs.webkit.org/show_bug.cgi?id=123025

        Reviewed by Jer Noble.

        The spec says that a MediaStreamSource can be shared by different tracks,
        so a track must have its own state tracking, synchronizing with its MediaStreamSource when
        the underlying MediaStreamSource changes the readyState.
        In the old implementation if a user invoked the stop method, its readyState method was still
        returning the MediaStreamSource state, which was wrong.
        This also adds a setEnabled method, which can be used to set the state of a track when a
        remote peer ends it, for instance.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::setState):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended):
        (WebCore::MediaStreamTrack::sourceStateChanged):
        (WebCore::MediaStreamTrack::trackDidEnd):
        * Modules/mediastream/MediaStreamTrack.h:

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Clean up transaction logging
        https://bugs.webkit.org/show_bug.cgi?id=123116

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export some TextStream functions.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Transition most use of IDBBackingStoreLevelDB to IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123105

        Reviewed by Anders Carlsson.

        Export more required headers:
        * WebCore.xcodeproj/project.pbxproj:

        Flesh out many of the pure virtual methods on IDBBackingStoreInterface, as well as
        the RecordIdentifier and Cursor classes:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        (WebCore::IDBBackingStoreInterface::RecordIdentifier::~RecordIdentifier):
        (WebCore::IDBBackingStoreInterface::Cursor::~Cursor):

        Use IDBBackingStoreInterface, IDBBackingStoreInterface::RecordIdentifier, and
        IDBBackingStoreInterface::Cursor wherever possible:

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::IndexKeyCursorImpl::clone):
        (WebCore::IndexCursorImpl::clone):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::Transaction::Transaction):
        (WebCore::IDBBackingStoreLevelDB::Transaction::begin):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::RecordIdentifier::RecordIdentifier):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        (WebCore::IDBCursorBackendLevelDB::create):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::backingStore):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendLevelDB::generateKey):
        (WebCore::IDBObjectStoreBackendLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-21  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes][CSS Regions] Don't apply shape-inside when we have multiple auto-height regions and the height is not resolved
        https://bugs.webkit.org/show_bug.cgi?id=123103

        Reviewed by David Hyatt.

        When we have multiple regions with auto-height, the region's height is not resolved from other elements we can't apply the
        the shape on the region. This patch prevents to apply the shape and fixes the behavior for these cases.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-autoheight-regions.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Backing store should take contentsScale into account
        https://bugs.webkit.org/show_bug.cgi?id=123106

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export FloatRect::scale.

2013-10-21  Andreas Kling  <akling@apple.com>

        RenderScrollbarPart doesn't need styleWillChange().
        <https://webkit.org/b/123113>

        We will call setInline(false) in styleDidChange(), there's no need
        to override styleWillChange() just to do it twice.

        Reviewed by Darin Adler.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] The layers from the flow thread should be collected under the regions' layers.
        https://bugs.webkit.org/show_bug.cgi?id=120457

        Reviewed by David Hyatt.

        This patch is based on the work of Alexandru Chiculita at https://bugs.webkit.org/attachment.cgi?id=203872&action=review

        The composited layers inside the named flow threads are collected as part of the regions (as children of the
        GraphicsLayer of the layer that corresponds to the region (which is attached to the parent renderer of
        RenderNameFlowFragment)).
        When a region displays a layer that needs accelerated compositing we activate the accelerated compositing for
        that region too (inside RenderLayerCompositor::computeRegionCompositingRequirements).

        This patch has landed before (as http://trac.webkit.org/changeset/156451), but was reverted because
        fast/multicol/mixed-positioning-stacking-order.html failed. The fix is inside RenderLayerCompositor::canBeComposited
        that only enables compositing for layers inside flow threads that collect the graphics layers under the regions.

        Another change from changeset #156451 is that now the region renderers are created as anonymous renderers under
        the element that has the flow-from property. When a composited layer is needed for the region, it sits in it's
        parent renderer, not in the region renderer (RenderNamedFlowFragment).

        Tests: compositing/regions/crash-transform-inside-region.html
               compositing/regions/floated-region-with-transformed-child.html
               compositing/regions/move-layer-from-one-region-to-another.html
               compositing/regions/propagate-region-box-shadow-border-padding-for-video.html
               compositing/regions/propagate-region-box-shadow-border-padding.html
               compositing/regions/region-as-layer-in-another-flowthread.html
               compositing/regions/transform-transparent-positioned-video-inside-region.html
               compositing/regions/transformed-layer-inside-transformed-layer.html
               compositing/regions/z-index-update.html
               compositing/regions/z-index.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren): Not for RenderFlowThreads, as they are updated
        through the RenderView::styleDidChange function.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout): When the layout of the flow thread is over (including the 2 phase layout),
        we update all the mappings between the layers inside the flow thread and the regions where those layers will be
        painted.
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant): Whether any of the regions has a compositing descendant.
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
        (WebCore::RenderFlowThread::collectsGraphicsLayersUnderRegions):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings): Triggers an update of the layers if a layer has moved
        from a region to another since the last update.
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::pushRenderFlowThread):
        * rendering/RenderGeometryMap.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::enclosingFlowThreadAncestor):
        (WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateLayerBounds): When we calculate the bounds of the RenderView, we ignore those
        flow threads that collect the graphics layers under the regions.
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Not if it's a flow thread that collects the graphics
        layers under the regions
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Now adjusts the ancestorCompositingBounds for the FlowThread.
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): Make sure that the region propagates
        its borders, paddings, outlines or box-shadows to layers inside it.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Now calls computeRegionCompositingRequirements.
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Do not iterate the RenderFlowThread directly if
        we are going to collect the composited layers as part of regions.
        (WebCore::RenderLayerCompositor::rebuildRegionCompositingLayerTree):
        (WebCore::RenderLayerCompositor::canBeComposited): CSS Regions flow threads do not need to be composited as we
        use composited RenderRegions to render the background of the RenderFlowThread.
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): If it's a container of a css region.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        (WebCore::RenderNamedFlowFragment::layerOwner): When the content inside the region requires the region to have a
        layer, the layer will be created on the region's parent renderer instead. This method returns that renderer
        holding the layer. The return value may be null.
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        (WebCore::RenderNamedFlowThread::collectsGraphicsLayersUnderRegions):
        * rendering/RenderNamedFlowThread.h: m_flowThreadChildList is now allocated through an OwnPtr to keep the render
        arena under the size limit.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderRegion.h:
        (WebCore::toRenderRegion):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * WebCore.exp.in: WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mediastream debug build
        https://bugs.webkit.org/show_bug.cgi?id=123104

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):

2013-10-21  Andreas Kling  <akling@apple.com>

        Merge RenderListMarker::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123098>

        If the marker's list-style-type or list-style-position changed, we
        need to dirty the layout. Move this logic to styleDidChange() so we
        can get rid of one styleWillChange() overload.

        Reviewed by Antti Koivisto.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix WHITESPACE issues in the CSS grammar.
        https://bugs.webkit.org/show_bug.cgi?id=123082

        Reviewed by Andreas Kling.

        This is a port of Rune Lillesveen's patch from https://codereview.chromium.org/25607005

        Fix WHITESPACE issues in the CSS grammar.

        A single WHITESPACE token consumes consecutive spaces, but does not consume
        spaces separated by comments. That means S* and S+ in CSS grammars need to
        accept multiple WHITESPACE tokens. Additionally, white spaces are not
        mandatory to separate an @-symbol and the rest of the prelude.

        Use space non-terminal instead of WHITESPACE for S+ in calc expressions.

        Use maybe_space non-terminal instead of WHITESPACE for S* after @-webkit-filter
        and @-webkit-region.

        Tests: fast/css/calc-comments-allowed.html
               fast/regions/webkit-region-syntax-space.html

        * css/CSSGrammar.y.in:

2013-10-21  Anton Obzhirov  <a.obzhirov@samsung.com>

        [ATK] Use atk_object_notify_state_change instead of manually emitting signals
        https://bugs.webkit.org/show_bug.cgi?id=122968

        Reviewed by Mario Sanchez Prada.

        Refactor emitting "state-change" event to use atk_object_notify_state_change
        instead of using g_signal_emit_by_name.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleDetach):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::maybeEmitTextFocusChange):

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Make TYPE_CASTS_BASE more flexible
        https://bugs.webkit.org/show_bug.cgi?id=122951

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE is being used by node|element type casts. However, it is difficult
        to be used by other type casts. For instance, CSSValue, Accessibility and so on.
        This patch modifies TYPE_CASTS_BASE which can support other type casts.

        Besides TYPE_CASTS_BASE body is moved from node.h to Assertions.h.

        No new tests, no behavior changes.

        * dom/Document.h:
        * dom/Node.h:

2013-10-21  Santosh Mahto  <santosh.ma@samsung.com>

        ASSERTION FAILED: !style->propertyIsImportant(propertyID) in WebCore::setTextDecorationProperty
        https://bugs.webkit.org/show_bug.cgi?id=122097

        Reviewed by Ryosuke Niwa.

        When remove format command is called we pushdown the ancestor style
        down to its children. Currently applying inline style to iframe
        while pushing down style which causes iframe to be reinserted in tree and
        triggres again subframe loading which repeats everytime and finally
        crash happens. So we should avoid applying inline style to iframe
        element as it doesnot reflect in its content while pushing down style
        on it.

        And ASSERT call has been removed from setTextDecoration property as
        the scenario is perfectly valid case.

        Test: editing/execCommand/remove-format-textdecoration-in-iframe.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Return if
        element is iframe.
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::setTextDecorationProperty): Remove ASSERT.

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

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 5)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move m_lineBoxes to RenderBlockFlow.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::removeFromDelayedUpdateScrollInfoSet):
        (WebCore::RenderBlock::paintContents):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::inlineBlockBaseline):
        (WebCore::RenderBlock::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlock::addFocusRingRects):
        (WebCore::RenderBlock::showLineTreeAndMark):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        (WebCore::RenderBlock::hasInlineBoxChildren):
        (WebCore::RenderBlock::paintInlineChildren):
        (WebCore::RenderBlock::hitTestInlineChildren):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::deleteLineBoxTree):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
        (WebCore::RenderBlockFlow::firstLineBoxBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::positionForBox):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineBoxes):
        (WebCore::RenderBlockFlow::firstLineBox):
        (WebCore::RenderBlockFlow::lastLineBox):
        (WebCore::RenderBlockFlow::firstRootBox):
        (WebCore::RenderBlockFlow::lastRootBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):

2013-10-20  Andreas Kling  <akling@apple.com>

        Avoid unnecessary vector copy in AnimationController event dispatch.
        <https://webkit.org/b/122994>

        Use Vector's move constructor instead of making a copy of the pending
        events queue and then clearing it.

        Reviewed by Simon Fraser.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Add abstract IDBBackingStoreInterface, use it to get IDBDatabaseBackendLevelDB closer to going cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123074

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBBackingStoreInterface.h: Added.
        (WebCore::IDBBackingStoreInterface::~IDBBackingStoreInterface):
        (WebCore::IDBBackingStoreInterface::Transaction::~Transaction):

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::Transaction::reset):
        (WebCore::IDBBackingStoreLevelDB::Transaction::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::deleteFunction):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        (WebCore::IDBTransactionBackendLevelDB::backingStoreTransaction):

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-10-20  Andreas Kling  <akling@apple.com>

        Use PassRef for StyleSheetContents.
        <https://webkit.org/b/123083>

        Let functions that return newly-constructed StyleSheetContents
        objects vend PassRef<StyleSheetContents> instead of PassRefPtr.

        Updated functions that take StyleSheetContents in arguments
        accordingly. And CSSStyleSheet now has a Ref internally. Woo!

        Reviewed by Antti Koivisto.

2013-10-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing "unused parameter" compiling warnings from WebKit2 and WebCore
        https://bugs.webkit.org/show_bug.cgi?id=123075

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (lineAtPositionForAtkBoundary):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):

2013-10-19  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StyleRules.
        <https://webkit.org/b/123072>

        Let functions that return newly-constructed StyleRuleFoo objects
        vend PassRef<StyleRuleFoo> instead of PassRefPtr.

        Since StyleRuleBase::copy() has to return something, we can't rely
        on ASSERT_NOT_REACHED() + return nullptr anymore, so I've replaced
        those with CRASH(). No call sites actually handled null anyway.

        Reviewed by Sam Weinig.

2013-10-19  Jer Noble  <jer.noble@apple.com>

        Unreviewed roll out of r157695; broke Mac builds.

        * Configurations/FeatureDefines.xcconfig:

2013-10-07  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-19  Sam Weinig  <sam@webkit.org>

        CTTE: Tighten up type usage around InputType::innerTextElement()
        https://bugs.webkit.org/show_bug.cgi?id=123078

        Reviewed by Anders Carlsson.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isTextControlInnerTextElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::innerTextElement):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::hasVisibleTextArea):
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTextFormControlElement.h:
        * html/InputType.h:
        (WebCore::InputType::innerTextElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::innerTextElement):
        * html/TextFieldInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::renderer):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::isTextControlInnerTextElement):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTextControlInnerBlock):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::innerTextElement):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::textBlockLogicalWidth):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::computeLogicalHeight):
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::autoscroll):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::toRenderTextControlInnerBlock):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Fix classes derived from RenderBlockFlow that were still calling
          up to RenderBlock rather than RenderBlockFlow.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::nodeAtPoint):
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::willBeDestroyed):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::styleDidChange):
        (WebCore::RenderMultiColumnBlock::updateLogicalWidthAndColumnWidth):
        (WebCore::RenderMultiColumnBlock::addChild):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsBlock::styleDidChange):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine):
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::willBeRemovedFromTree):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::willBeRemovedFromTree):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::offsetFromContainer):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::styleDidChange):
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scrollWidth):
        (WebCore::RenderTextControlSingleLine::scrollHeight):
        (WebCore::RenderTextControlSingleLine::scrollLeft):
        (WebCore::RenderTextControlSingleLine::scrollTop):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContent):
        (WebCore::RenderView::addChild):
        (WebCore::RenderView::visualOverflowRect):
        (WebCore::RenderView::styleDidChange):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):
        (WebCore::RenderSVGBlock::updateFromStyle):
        (WebCore::RenderSVGBlock::willBeDestroyed):
        (WebCore::RenderSVGBlock::styleWillChange):
        (WebCore::RenderSVGBlock::styleDidChange):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::flowBoxForRenderer):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Move containsNonZeroBidiLevel to RenderBlockFlow.

        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsNonZeroBidiLevel):
        * rendering/RenderBlockFlow.h:

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move truncation (e.g. line clamp and ellipse) support to RenderBlockFlow.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::markupBox):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::heightForLineCount):
        (WebCore::RenderBlockFlow::clearTruncation):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):

2013-10-19  Andreas Kling  <akling@apple.com>

        StyleResolver should deal in PassRef<RenderStyle> where possible.
        <https://webkit.org/b/123061>

        Make StyleResolver functions that returned or took RenderStyles
        by PassRefPtr use PassRef instead where possible.

        Reviewed by Anders Carlsson.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Global rename of the class "IDBBackingStore" to "IDBBackingStoreLevelDB"

        Rubberstamped by Anders Carlsson (And Andreas Kling wanted to, but he wasn’t around)

        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Link fails.
        https://bugs.webkit.org/show_bug.cgi?id=123019

        Reviewed by Darin Adler.

        Added empty CertificateInfo implementation for Curl.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CertificateInfoCurl.cpp: Added.
        (WebCore::CertificateInfo::CertificateInfo):
        (WebCore::CertificateInfo::~CertificateInfo):

2013-10-19  Filip Pizlo  <fpizlo@apple.com>

        libWebCoreTestSupport should have explicit exports
        https://bugs.webkit.org/show_bug.cgi?id=123053

        Reviewed by Oliver Hunt.

        No new tests because there is no change in behavior.

        * Configurations/WebCoreTestSupport.xcconfig:
        * testing/js/WebCoreTestSupport.h:

2013-10-18  Andreas Kling  <akling@apple.com>

        Start passing RenderStyle around with PassRef.
        <https://webkit.org/b/123051>

        Made the RenderStyle::create methods return PassRef<RenderStyle>
        and RenderElement::setStyle take a PassRef<RenderStyle>.

        Reviewed by Darin Adler.

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Dan Bernstein.

        - Make the RootInlineBox constructor take a RenderBlockFlow.
        - Move createRootInlineBox, and createAndAppendRootInlineBox to RenderBlockFlow.

        * editing/VisibleUnits.cpp:
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createRootInlineBox):
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox):
        (WebCore::createInlineBoxForRenderer):
        (WebCore::RenderBlockFlow::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::localSelectionRect):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::rendererLineBoxes):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::setContainingRegion):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::lineSnapAdjustment):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::computeCaretRect):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::blockFlow):
        (WebCore::RootInlineBox::closestLeafChildForPoint):
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/RenderSVGText.h:
        (WebCore::toRenderSVGText):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::renderSVGText):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/svg/SVGRootInlineBox.h:

2013-10-18  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Double-buffering and minimization of repaints
        https://bugs.webkit.org/show_bug.cgi?id=123043

        Reviewed by Simon Fraser.

        No new tests, not yet testable.

        * WebCore.exp.in:
        Export one version of drawLayerContents and Region::contains.

        * WebCore.xcodeproj/project.pbxproj:
        Expose WebLayer.h as a private header.

        * platform/graphics/mac/WebLayer.h:
        Clean up this header, and add a new drawLayerContents that can operate without a CALayer.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        Split drawLayerContents into one method that acquires properties CALayer,
        and one that just does the painting.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Try to fix the Lion build.

        * bindings/objc/ObjCNodeFilterCondition.h:

2013-10-18  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebSafe{GCActivityCallback, IncrementalSweeper}IOS
        https://bugs.webkit.org/show_bug.cgi?id=123049

        Reviewed by Mark Hahnenberg.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebSafeGCActivityCallbackIOS.h: Added.
        * platform/ios/WebSafeIncrementalSweeperIOS.h: Added.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Remove spaces between template angle brackets
        https://bugs.webkit.org/show_bug.cgi?id=123040

        Reviewed by Andreas Kling.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        * Modules/geolocation/GeolocationController.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * Modules/indexeddb/IDBEventDispatcher.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::onSuccessWithPrefetch):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::activeRanges):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::buffered):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::activeRanges):
        * Modules/mediasource/WebKitMediaSource.h:
        * Modules/mediasource/WebKitSourceBufferList.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCStatsResponse.h:
        (WebCore::RTCStatsResponse::result):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::getVoices):
        * Modules/speech/SpeechSynthesis.h:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeOutput.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::origins):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::origins):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveBinaryData):
        * Modules/websockets/WebSocketExtensionDispatcher.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerGlobalScopeDidReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSMutationCallback.h:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bridge/objc/objc_class.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapePolygon::values):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontFace):
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        * css/CSSPropertySourceData.h:
        * css/CSSRuleList.h:
        (WebCore::StaticCSSRuleList::rules):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontLoaded):
        * css/CSSSegmentedFontFace.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * css/CSSSelectorList.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        (WebCore::compareCSSValueVector):
        * css/CSSValuePool.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets):
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedRuleList):
        * css/ElementRuleCollector.h:
        * css/FontLoader.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
        * css/InspectorCSSOMWrappers.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaList::item):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::queryVector):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryMatcher.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/SelectorFilter.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::analyzeStyleSheet):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::loadPendingShaders):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRuleGroup::childRules):
        (WebCore::StyleRuleMedia::create):
        (WebCore::StyleRuleSupports::create):
        (WebCore::StyleRuleRegion::create):
        (WebCore::StyleRuleHost::create):
        (WebCore::StyleRuleHost::StyleRuleHost):
        * css/StyleScopeResolver.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::childRules):
        (WebCore::StyleSheetContents::importRules):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::StyleRuleKeyframes::keyframes):
        * dom/CheckedRadioButtons.h:
        * dom/ClientRectList.h:
        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        * dom/CrossThreadTask.h:
        * dom/Document.cpp:
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::webkitExitFullscreen):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers):
        * dom/DocumentMarkerController.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        (WebCore::styleSheetsUseRemUnits):
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.cpp:
        (WebCore::Element::attrNodeList):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/Element.h:
        * dom/EventListenerMap.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/IdTargetObserverRegistry.h:
        * dom/MutationCallback.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords):
        (WebCore::MutationObserver::deliver):
        (WebCore::MutationObserver::deliverAllMutations):
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.h:
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::namedFlows):
        * dom/NamedFlowCollection.h:
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        (WebCore::Range::processNodes):
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * dom/Range.h:
        * dom/ScopedEventQueue.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptedAnimationController.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/CompositeEditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement):
        (WebCore::htmlAttributeEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::styleFromMatchedRulesForElement):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/Editor.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock):
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):
        * editing/SimplifyMarkupCommand.h:
        * editing/SpellChecker.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply):
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        * editing/mac/AlternativeTextUIController.h:
        * fileapi/FileList.h:
        * history/BackForwardList.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):
        * html/FormController.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::append):
        * html/HTMLCollection.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::checkValidity):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::platformTextTracks):
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        * html/MediaController.h:
        * html/MediaFragmentURIParser.h:
        * html/ValidationMessage.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.h:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        * html/parser/HTMLResourcePreloader.h:
        * html/parser/XSSAuditor.h:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControlElements.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrackCueList.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::invalidateTrackIndexesAfterTrack):
        (TextTrackList::remove):
        (TextTrackList::contains):
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.cpp:
        (TrackListBase::asyncEventTimerFired):
        * html/track/TrackListBase.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::getNewCues):
        (WebCore::WebVTTParser::getNewRegions):
        * html/track/WebVTTParser.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::lineEndings):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::UpdateRegionLayoutTask::onTimer):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::onTimer):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::lineEndings):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorArrayBase::writeJSON):
        * inspector/InspectorValues.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):
        (WebCore::DocumentLoader::getSubresources):
        * loader/DocumentLoader.h:
        * loader/FormState.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues):
        (WebCore::TextTrackLoader::getNewRegions):
        * loader/TextTrackLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerGlobalScopeDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/archive/Archive.cpp:
        (WebCore::Archive::clearAllSubframeArchives):
        (WebCore::Archive::clearAllSubframeArchivesImpl):
        * loader/archive/Archive.h:
        (WebCore::Archive::subresources):
        (WebCore::Archive::subframeArchives):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/mhtml/MHTMLParser.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::notifyPendingLoadDecisions):
        * loader/icon/IconDatabase.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didAssociateFormControls):
        * page/Console.h:
        * page/ContentSecurityPolicy.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges):
        * page/Page.h:
        * page/PageGroup.h:
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        * page/Performance.h:
        * page/PerformanceEntryList.cpp:
        (WebCore::PerformanceEntryList::appendAll):
        * page/PerformanceEntryList.h:
        * page/SecurityOriginHash.h:
        * page/SecurityPolicy.cpp:
        * page/SpeechInputResult.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::children):
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::syncChildPositions):
        * platform/CrossThreadCopier.cpp:
        * platform/CrossThreadCopier.h:
        * platform/DragData.h:
        * platform/MainThreadTask.h:
        * platform/PODFreeListArena.h:
        (WebCore::PODFreeListArena::freeObject):
        (WebCore::PODFreeListArena::allocate):
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::PODRedBlackTree):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::voiceList):
        * platform/PlatformSpeechSynthesizer.h:
        * platform/RunLoop.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::clipRectChanged):
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/ScrollView.h:
        * platform/SharedBuffer.h:
        * platform/Supplementable.h:
        (WebCore::Supplement::provideTo):
        (WebCore::Supplementable::provideSupplement):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioResampler.h:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFKernel.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::copySomeDataFromDataArray):
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygon::FloatPolygon):
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::::locatePageSlowCase):
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/PlatformTextTrackMenu.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/WidthCache.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setValues):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/filters/CustomFilterParameterList.h:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::operations):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::create):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::operations):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::documentFragmentWithRTF):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCConfiguration.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::clientCerts):
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey):
        (WebCore::::createValueForKey):
        (WebCore::cfLocaleCache):
        * plugins/PluginMainThreadScheduler.h:
        * rendering/HitTestResult.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        * rendering/RenderBlock.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        * rendering/RenderLayer.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::getRanges):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        * rendering/RootInlineBox.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::computeShapePaddingBounds):
        (WebCore::computeShapeMarginBounds):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createPolygonShape):
        (WebCore::Shape::createShape):
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInterval.h:
        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):
        (WebCore::QuotesData::QuotesData):
        * rendering/style/QuotesData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/StyleGridData.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/SVGResourcesCache.h:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageEventDispatcher.h:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::origins):
        * storage/StorageTracker.h:
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGElementAnimatedProperties::SVGElementAnimatedProperties):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget):
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget):
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontElement.h:
        * svg/SVGGlyphMap.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeAnimated):
        * svg/SVGMarkerElement.h:
        * svg/SVGPathSegList.h:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::create):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::animatedPropertiesForAttribute):
        * svg/properties/SVGAttributeToPropertyMap.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::create):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/WorkerMessagingProxy.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XSLStyleSheet.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-10-18  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Cleaning warning messages from StyleResolveTree
        https://bugs.webkit.org/show_bug.cgi?id=123030

        Reviewed by Andreas Kling.

        No new tests needed.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):

2013-10-18  Brady Eidson  <beidson@apple.com>

        Get rid of IDBFactoryBackendLevelDB and IDBTransactionBackendLevelDB in IDBDatabaseBackendLevelDB.
        https://bugs.webkit.org/show_bug.cgi?id=123039

        Reviewed by Anders Carlsson.

        Add a few concepts to the interfaces to make this work:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore::IDBTransactionBackendInterface::id):
        (WebCore::IDBTransactionBackendInterface::IDBTransactionBackendInterface):

        Adapt to using Interface ptr’s instead of LevelDB ptr’s:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::transactionStarted):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinished):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-18  Dean Jackson  <dino@apple.com>

        Unable to upload <img src="foo.svg"> as WebGL texture
        https://bugs.webkit.org/show_bug.cgi?id=123035

        Reviewed by Tim Horton.

        If the HTMLImageElement passed to texture2D is an SVG
        image, paint it first into a bitmap buffer and upload that.
        Note that the SVG image still needs to have an intrinsic
        or explicit size - see how the test case must set width and
        height.

        I also renamed the cache of ImageBuffers since it is
        no longer only being used for video frames.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-svg-image.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Rename m_videoCache to m_generatedImageCache.
        (WebCore::WebGLRenderingContext::drawImageIntoBuffer): New method that creates an ImageBuffer
        of the appropriate size and renders into that.
        (WebCore::WebGLRenderingContext::texImage2D): If we see an SVG image, render it first.
        (WebCore::WebGLRenderingContext::videoFrameToImage): Renamed m_generatedImageCache.
        (WebCore::WebGLRenderingContext::texSubImage2D): If we see an SVG image, render it first.
        * html/canvas/WebGLRenderingContext.h: Renaming.

2013-10-18  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackend operations to the IDBTransactionBackend itself..
        https://bugs.webkit.org/show_bug.cgi?id=123028

        Reviewed by Alexey Proskuryakov.

        This gets rid of a big blob of LevelDB specific code from IDBDatabaseBackendLevelDB.cpp,
        bringing us much closer to having it be cross platform.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Added.
        (WebCore::IDBTransactionBackendInterface::~IDBTransactionBackendInterface):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::perform): Update for new method signature.
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::perform): Ditto.
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::perform): Ditto.

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp: Move all operations into
          IDBTransactionBackendLevelDBOperations, then start scheduling them using the new
          IDBTransactionBackendInterface scheduling methods.
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h: Move definitions of PendingOpenCall and
          PendingDeleteCall to the header.
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::databaseCallbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::version):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::transactionId):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::PendingOpenCall):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::PendingDeleteCall):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Add a newly required include.
        * Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp: Ditto.

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp: Implement the new interface to
          handle scheduling of operations in a cross platform manner, then rely on the new
          IDBTransactionBackendLevelDBOperations classes for the actual operations.
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleGetOperation):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleSetIndexesReadyOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp: Added.
          Move all the LevelDB transaction operations from IDBDatabaseBackendLevelDB to here.
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h: Added.
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-18  Beth Dakin  <bdakin@apple.com>

        Rubber-banding is often not smooth on infinitely scrolling websites
        https://bugs.webkit.org/show_bug.cgi?id=122985

        Reviewed by Simon Fraser.

        totalContentsSize is an important part of the calculation for 
        maximumScrollPosition(). This function is called repeatedly throughout the curve 
        of a rubber-band to determine the stretch amount. To keep the rubber-band 
        animation smooth, it should be allowed to finish its animation using the old 
        totalContentsSize. This patch does that by adding a new variable, 
        m_totalContentsSizeForRubberBand. This value should almost always be equivalent to 
        m_totalContentsSize. It will only vary if m_totalContentsSize has changed in the 
        middle of a rubber-band, and in that case, it will stay equivalent to the old 
        totalContentSize value until the rubber band animation finishes.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):

2013-10-18  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for --no-svg option.
        m_svgStyle of RenderStyle is guarded with the ENABLE_SVG flag.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):

2013-10-17  Brady Eidson  <beidson@apple.com>

        Cleanup the Modules group in the WebCore.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=123009

        Rubberstamped by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:

2013-10-18  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Fix invalid signal to set objects to an unknown state "layout-complete"
        https://bugs.webkit.org/show_bug.cgi?id=122970

        Reviewed by Mario Sanchez Prada.

        Removed an invalid signal to set objects to an unknown state
        layout-complete. This signal was originally generated to notify DRT
        and WKTR in case of page load complete.
        It was replaced by ATK:AtkDocument:load-complete, which is already sent
        by AXObjectCache::frameLoadingEventPlatformNotification().

        There is no new test since the changes are covered by existing ones
        (e.g. accessibility/loading-iframe-sends-notification.html).

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed an invalid
        signal to set objects to an unknown state layout-complete.

2013-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Generate API documentation for GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=121538

        Reviewed by Gustavo Noronha Silva.

        * bindings/gobject/GNUmakefile.am: Add a explicit rule for all
        .symbols file making them depend on the corresponding header file,
        since the .symbols file is generated by the bindings generator.

2013-10-18  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Simplify implementation of atk_text_get_text
        https://bugs.webkit.org/show_bug.cgi?id=122644

        Reviewed by Chris Fleizach.

        Simplified code so we only call textUnderElement() directly once
        and only when needed. Also, moved the specific code for ColorWell
        objects up to the beginning of that function, so we don't do any
        additional efforts like computing text ranges in those cases.

        No new tests are needed, just to make sure that the current layout
        and unit tests are still passing, which they are.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (textForObject): Fixed a issue that got detected while working on
        this patch, which was causing a '\n' to be artificially appended
        at the end of text controls all the time.
        (webkitAccessibleTextGetText): Simplified function.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAXStringForRange): Removed
        the check that prevents from pass ranges exceeding the limits of
        the element's text, since those will be checked anyway when
        calling String::substring().

2013-10-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer][GTK] Add GRefPtr::outPtr()
        https://bugs.webkit.org/show_bug.cgi?id=122996

        Reviewed by Philippe Normand.

        No new tests because this is just simplifying existing code.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr specialization for GstToc.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Same.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Use GRefPtr::outPtr() to simplify code.
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        (WebCore::GStreamerGWorld::removePlatformVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamerBase::currentVideoSinkCaps):
        * platform/network/soup/ResourceHandleSoup.cpp: Same.
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-10-17  Alexey Proskuryakov  <ap@apple.com>

        Don't add an include for return type of a [Custom] function in generated bindings code
        https://bugs.webkit.org/show_bug.cgi?id=122972

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLSpace always has a MathMLTextElement.
        <https://webkit.org/b/122992>

        The renderer is never anonymous and always has a corresponding
        MathMLTextElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::RenderMathMLSpace):
        (WebCore::RenderMathMLSpace::updateFromElement):
        * rendering/mathml/RenderMathMLSpace.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Anders Carlsson.

        No new tests, just restoring old code.

        Un-do part of the patch for bug 122915; we can't early-return
        in the constructor, there's still more work to do.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):

2013-10-17  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] Crash when highlighting a node of a flow with no regions
        https://bugs.webkit.org/show_bug.cgi?id=122993

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/dom/highlight-flow-with-no-region.html

        Even if a named flow has no regions the content of the flow will still have renderer objects created.
        Removed the assumption that all renderers inside a RenderFlowThread will always have an enclosing RenderRegion.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRendererFragments):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLOperator always has a MathMLElement.
        <https://webkit.org/b/122988>

        Reviewed by Antti Koivisto.

        The renderer is never anonymous and always has a corresponding
        MathMLElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

2013-10-17  Nico Weber  <thakis@chromium.org>

        Fix three bugs in the equals() implementations for css gradients.
        https://bugs.webkit.org/show_bug.cgi?id=122987

        Reviewed by Andreas Kling.

        1. Linear gradients were considered equal if the first gradient has no x and y
           position and the second has no x but does have y.
        2. Same as 1, for radial gradients. (This doesn't happen in practice as
           CSSParser::parseRadialGradient rejects such input, so no test for this case.)
        3. Radial gradients without x and y position weren't considered equal even if
           they were.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::equals):
        (WebCore::CSSRadialGradientValue::equals):

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow front-end to trigger the system beep sound to signal an error
        https://bugs.webkit.org/show_bug.cgi?id=122955

        Reviewed by Timothy Hatcher.

        New beep() method exposed on InspectorFrontendHost calling into WebCore's systemBeep().

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::beep):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-10-17  Anders Carlsson  <andersca@apple.com>

        Remove PlatformCAAnimation::supportsValueFunction()
        https://bugs.webkit.org/show_bug.cgi?id=122990

        Reviewed by Tim Horton.

        PlatformCAAnimation::supportsValueFunction always returns true now, so there's no need for it to exist anymore.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFenced always has a MathMLInlineContainerElement.
        <https://webkit.org/b/122986>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Anders Carlsson.

2013-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Comment AffineTransform::xScale() and yScale() to make their meanings clearer
        https://bugs.webkit.org/show_bug.cgi?id=122981

        Reviewed by Simon Fraser.

        * platform/graphics/transforms/AffineTransform.h:

2013-10-17  Vivek Galatage  <vivek.vg@samsung.com>

        Remove unnecessary check for RenderLayer and rename ensureLayer to createLayer in RenderLayerModelObject.
        https://bugs.webkit.org/show_bug.cgi?id=122928

        Reviewed by Darin Adler.

        No new tests due to code refactoring.

        RenderLayerModelObject::styleDidChange invokes the ensureLayer() only in case of !layer().
        Again checking for layer existence would be deemed redundant in ensureLayer.
        Replacing it with an ASSERT(!m_layer) and also renaming it to createLayer.

        Blink review URL: https://codereview.chromium.org/27246003/

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::createLayer):
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderLayerModelObject.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayerMac workaround for <rdar://problem/7390716>
        https://bugs.webkit.org/show_bug.cgi?id=122983

        Reviewed by Simon Fraser.

        Remove a workaround for a bug fixed in Lion.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setSublayers):
        (PlatformCALayerMac::removeAllSublayers):
        (PlatformCALayerMac::adoptSublayers):

2013-10-17  Robert Hogan  <robert@webkit.org>

        "border-collapse: collapse;" for table removes part of its border (was: Border disappears when close to some elements)
        https://bugs.webkit.org/show_bug.cgi?id=8914

        Reviewed by David Hyatt.

        The table section's side of a collapsed border won't get painted if there are no cells there to paint it. So instead
        of relying solely on cells to paint the collapsed border paint the appropriate section of the border if there's no
        cell to take care of it.

        Tests: fast/table/paint-section-borders-without-cells-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr.html
               fast/table/paint-section-borders-without-cells-vertical-rl.html
               fast/table/paint-section-borders-without-cells.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        (WebCore::RenderTableSection::offsetLeftForRowGroupBorder):
        (WebCore::RenderTableSection::offsetTopForRowGroupBorder):
        (WebCore::RenderTableSection::verticalRowGroupBorderHeight):
        (WebCore::RenderTableSection::horizontalRowGroupBorderWidth):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        (WebCore::physicalBorderForDirection):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderTableSection.h:

2013-10-17  Andreas Kling  <akling@apple.com>

        StyleRuleFoo::mutableProperties() should return a reference.
        <https://webkit.org/b/122962>

        The mutableProperties() functions always return objects, so make
        them return MutableStylePropertySet&.

        Also tweaked the StyleRuleCSSStyleDeclaration constructor to take
        references to both the properties and the owner rule since both
        are required.

        Reviewed by Antti Koivisto.

2013-10-17  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Improve the performance of image valued shapes with large shape-margins
        https://bugs.webkit.org/show_bug.cgi?id=122613

        Reviewed by Andreas Kling.

        The cost of computing the shape-margin boundary of an image-valued shape-outside
        is now proportional to (2 * shape-margin + image.height) rather than
        (2 * shape-margin * image.height). The performance improvement comes from skipping
        sequences of rounded-rectangle intervals that will not contribute to the final
        result. Each non-empty row in the original image contributes one rounded-rectangle
        whose corner radius is shape-margin, height is 2 * shape-margin, and width is
        2 * shape-margin plus the width of the limits of the intervals on the row.

        Renamed private method RasterShape::getIntervals() to intervalsAt() to be a little
        more consistent with WebKit naming conventions.

        There are no new tests since is just an internal refactoring.

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::set): Changed the x1,x2 parameters to an IntShapeInterval.
        (WebCore::RasterShapeIntervals::contains): Refactor for the getIntervals() => intervalsAt() rename.
        (WebCore::RasterShapeIntervals::getIntervalX1Values): Ditto.
        (WebCore::RasterShapeIntervals::getIncludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::getExcludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): Performance tuning.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt): Renamed getIntervals().
        (WebCore::RasterShapeIntervals::limitIntervalAt): Return the min/max limits of the intervals at Y.
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::isEmpty): Added.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Add URLMediaStream in the build
        https://bugs.webkit.org/show_bug.cgi?id=122833

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Add mediastream/gstreamer in include directories list.
        * GNUmakefile.list.am: Add DOMURLMediaStream files in the build.

2013-10-17  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StylePropertySets.
        <https://webkit.org/b/122948>

        Make functions that construct StylePropertySets return PassRef
        instead of PassRefPtr. Since they never return null, this gets rid
        of the extra branch in ~PassRefPtr everywhere.

        Also StyleRule* classes now hold a Ref<StylePropertySet>, codifying
        the fact that they always have a property set.

        Reviewed by Antti Koivisto.

2013-10-17  Andreas Kling  <akling@apple.com>

        DataRef<T> should use Ref<T> internally.
        <https://webkit.org/b/122953>

        DataRef is used to hold RenderStyle substructures, and due to the
        way style inheritance is implemented, DataRef will always point to
        a live object.

        Codify this by making DataRef::m_data a Ref, and making all methods
        that create substructure objects return PassRef.

        Reviewed by Antti Koivisto.

2013-10-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Anonymous nested regions
        https://bugs.webkit.org/show_bug.cgi?id=119135

        Reviewed by David Hyatt.

        Tests: fast/regions/table-caption-as-region.html
               fast/regions/table-cell-as-region.html

        This patch allows any non-replaced block to behave like a region. When an element is styled with the
        -webkit-flow-from property, instead of making the renderer a RenderRegion, we let the original
        renderer be created the same way and we add a region as an anonymous child for the renderer.
        The anonymous block child, modeled by the new RenderNamedFlowFragment class, will be responsible
        for the fragmentation of the named flow thread content.

        A RenderBlockFlow object will keep a reference to a RenderNamedFlowFragment(RenderRegion) inside its
        rare data structures.

        Contains code contributed by Catalin Badea.
 
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp: Changed to take the anonymous region into account.
        (WebCore::Element::renderRegion):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/WebKitNamedFlow.cpp: Ditto.
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        * inspector/InspectorOverlay.cpp: Take into account the new model for regions, with an anonymous region inside a block.
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeShapeSize): For a render named flow fragment, there is no need to recompute the shape inside
        we can take it from the parent.
        (WebCore::RenderBlock::renderName): Make the block that contains a render named flow fragment (region) report RenderRegion.
        A future patch that will change this will need to rebase a lot of tests.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertedIntoTree): Create the anonymous region if needed (change of -webkit-flow-from determines Node reattach).
        (WebCore::RenderBlockFlow::willBeDestroyed): Clean-up the anonymous region if necessary.
        (WebCore::RenderBlockFlow::clearFloats): Small style change to make sure that check-webkit-style reports 0 failures on RenderBlockFlow.cpp.
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::styleDidChange): Update the style of the anonymous region too.
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded): Helper function to create the anonymous region
        and to add it as a child to the block.
        (WebCore::RenderBlockFlow::canHaveChildren):
        (WebCore::RenderBlockFlow::canHaveGeneratedChildren):
        (WebCore::RenderBlockFlow::namedFlowFragmentNeedsUpdate): Force a layout of the anonymous region if the
        parent block has percentage height (similar to RenderBlock::updateBlockChildDirtyBitsBeforeLayout)
        (WebCore::RenderBlockFlow::updateLogicalHeight): Update the logical height of anonymous region when the height of parent is updated.
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): Remove the direct creation of RenderRegion objects since they will be
        created as anonymous children of block flow objects.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement): Account for anonymous region if necessary.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent): Take anonymous region into account
        and use the anonymous region parent offset/border.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Check for style instead of isRenderRegion since
        the parent of the anonymous region will get the layer.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertedIntoTree): Call RenderBlockFlow method instead.
        * rendering/RenderNamedFlowFragment.cpp: Added. Model the behaviour of the anonymous region.
        Has RenderRegion as a base class.
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::~RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::setStyleForNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::shouldHaveAutoLogicalHeight):
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderNamedFlowFragment.h: Added.
        (WebCore::RenderNamedFlowFragment::isPseudoElementRegion):
        (WebCore::RenderNamedFlowFragment::renderName):
        (WebCore::toRenderNamedFlowFragment):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isRenderNamedFlowFragmentContainer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderNamedFlowFragment):
        * rendering/RenderRegion.h:
        * rendering/RenderTableCaption.cpp: Call RenderBlockFlow method instead.
        (WebCore::RenderTableCaption::insertedIntoTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::shapeSize):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-17  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Properly expose tables in accessibility
        https://bugs.webkit.org/show_bug.cgi?id=122894

        Reviewed by Chris Fleizach.

        All tables should exposed as tables.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored):

2013-10-17  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Too many arguments for format in WebKitWebAudioSourceGStreamer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=122932

        Reviewed by Philippe Normand.

        No new tests because this just fixes a build warning.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Add another %s for the second part of the pad name.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        The relevant conversion doesn't happen implicitly.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        Apparently some Windows code uses setFrame and I missed it.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Complete support for simple layer properties
        https://bugs.webkit.org/show_bug.cgi?id=122933

        Reviewed by Anders Carlsson.

        No new tests, not yet testable.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        Don't dump the CALayer pointer if we own a PlatformCALayerRemote.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        Fix the visible tile wash (my fault!), and make it use setPosition and
        setBounds instead of setFrame; while more convenient, it is the only
        caller of setFrame, so we'll remove it.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isRemote): Added.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):
        (toCAFilterType):
        (PlatformCALayerMac::synchronouslyDisplayTilesInRect):
        (PlatformCALayerMac::playerLayer):
        Remove setFrame, fix some pointer sides.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Remove setFrame.

2013-10-16  Andreas Kling  <akling@apple.com>

        Take RenderObjects out of the arena.
        <https://webkit.org/b/122895>

        Reviewed by Antti Koivisto.

        Stop arena-allocating renderers so we can move forward on improving
        render tree memory management. This will also allow rendering code
        to take advantage of malloc optimizations.

        Line boxes and BiDi runs remain in the arena for now.

2013-10-16  Roger Fong  <roger_fong@apple.com>

        [Windows] Speculative fix for test, media/video-canvas-drawing-output.html.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createImageForTimeInRect):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Simon Fraser.

        No new tests, just a minor refactoring.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::PlatformCALayer):
        Add a LayerType argument.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        Use the new LayerType argument, and early-return in the case where we
        are wrapping a custom PlatformLayer.
        Drive-by un-indent the switch in the Mac version.

2013-10-15  Brady Eidson  <beidson@apple.com>

        Flesh out the DatabaseProcess (and launch it!)
        https://bugs.webkit.org/show_bug.cgi?id=122884

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Add a localizable string.
        * WebCore.xcodeproj/project.pbxproj: Export some more headers.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerTree: Add support for more layer properties and transform layers
        https://bugs.webkit.org/show_bug.cgi?id=122906

        Reviewed by Anders Carlsson.

        No new tests, this code is not yet testable.

        * WebCore.exp.in:
        Export some TextStream and TransformationMatrix stuff.

2013-10-16  KyungTae Kim  <ktf.kim@samsung.com>

        During editing, merge inline style with overriding other author styles
        https://bugs.webkit.org/show_bug.cgi?id=122874

        Reviewed by Ryosuke Niwa.

        Inline styles need to override other author styles even on DoNotOverrideValues mode.
        So, merge and override inline styles to other author styles before merging them to m_mutableStyle.

        Test: editing/deleting/merge-div-with-inline-style.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):

2013-10-16  peavo@outlook.com  <peavo@outlook.com>

        Emphasis marks has wrong color.
        https://bugs.webkit.org/show_bug.cgi?id=122829

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-emphasis.html.
               fast/text/text-emphasis-expected.html.

        Emphasis color should be set as fill color, not stroke color.

        * rendering/TextPaintStyle.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move code for finding rendered character offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122892

        Reviewed by Andreas Kling.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::countRenderedCharacterOffsets):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        
            Renamed for consistency.

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::countCharacterOffsets):
        
            This used to be Position::renderedPosition.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::removeChild() should take child as a reference.
        <https://webkit.org/b/122888>

        We can't remove a child without a child to remove.

        Reviewed by Antti Koivisto.

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move test for contained caret offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122887

        Reviewed by Andreas Kling.

        * dom/Position.cpp:
        (WebCore::Position::renderedOffset):
        (WebCore::Position::isCandidate):
        
            Remove isRenderedText, call RenderText::containsCaretOffset instead.

        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::rendersInDifferentPosition):
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::containsCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        * rendering/RenderText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::containsOffset):
        
            Combined implementations of Position::isRenderedCharacter and Position::isRenderedText.

        * rendering/RenderTextLineBoxes.h:
        
            Remove containsCaretOffset(), functionality is now in RenderTextLineBoxes::containsOffset.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::isChildAllowed() should take const references.
        <https://webkit.org/b/122870>

        Reviewed by Anders Carlsson.

        The isChildAllowed() functions expect non-null values to be passed,
        so enforce this at compile-time.

        Reordered some checks to do bit tests before virtual calls.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] video info unset if upstream doesn't query allocation
        https://bugs.webkit.org/show_bug.cgi?id=122834

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): If the sink didn't process any allocation
        query then use the configured source pad caps and don't rely on
        invalid video info.

2013-10-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] move Logging.h include to GStreamerUtilities.h
        https://bugs.webkit.org/show_bug.cgi?id=122886

        Reviewed by Gustavo Noronha Silva.

        Include Logging.h from GStreamerUtilities.h so the modules using
        the LOG_MEDIA macros don't need to bother, especially for Debug builds.

        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2013-10-16  Mark Rowe  <mrowe@apple.com>

        Fix the build after r157478.

        Rubber-stamped by Tim Horton.

        Due to the way WebCore.exp.in is used, it can't be used to export a differing set of symbols
        for different architectures. We often work around this by tweaking code slightly to avoid
        needing to export different symbols. However, in this case the symbol name itself encodes an
        architecture-specific detail and there's no clear way to avoid the requirement to export it.

        To deal with this case we turn to ld's support for wildcards in the symbol export list.

        * WebCore.exp.in: Use wildcards in place of the number that represents by how much "this"
        should be adjusted when calling through the vtable thunk. Also sort the remainder of the file.
        * make-export-file-generator: Don't attempt to verify symbol names that contain wildcard characters.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Two more exports for 32-bit build fix.
        The duality of CGFloat means that we use a different
        version of getRGBA (and the cast operator)
        on 32-bit systems.

        * WebCore.exp.in:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Another shot at a build fix; apparently these
        do need exporting for some reason, but are different
        on 32-bit.

        * WebCore.exp.in:

2013-10-15  Alexey Proskuryakov  <ap@apple.com>

        GenerateIsReachable=ImplContext is confusing
        https://bugs.webkit.org/show_bug.cgi?id=122864

        Reviewed by Geoffrey Garen.

        Renamed to ImplWebGLRenderingContext.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/OESElementIndexUint.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESTextureHalfFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLCompressedTextureATC.idl:
        * html/canvas/WebGLCompressedTexturePVRTC.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLLoseContext.idl:

        * WebCore.xcodeproj/project.pbxproj: While at it, added OESElementIndexUint.idl
        to Xcode project.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix; I don't know how to export.
        This may not help.

        * WebCore.exp.in:

2013-10-15  Dean Jackson  <dino@apple.com>

        Add ENABLE_WEB_ANIMATIONS flag
        https://bugs.webkit.org/show_bug.cgi?id=122871

        Reviewed by Tim Horton.

        Eventually might be http://dev.w3.org/fxtf/web-animations/
        but this is just engine-internal work at the moment.

        * Configurations/FeatureDefines.xcconfig:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Add a PlatformCALayer subclass that proxies its property changes across the process boundary
        https://bugs.webkit.org/show_bug.cgi?id=122773

        Reviewed by Anders Carlsson.

        No new tests, the new drawing area is not yet testable.

        * WebCore.exp.in:
        Export lots of GraphicsLayerCA stuff so we can inherit from it in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make PlatformCAFilters.h a private header.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::initialize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        * platform/graphics/ca/GraphicsLayerCA.h:
        Defer creation of the main PlatformCALayer until just after the constructor is finished
        so that GraphicsLayerCA subclasses can successfully override createPlatformCALayer.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        Make platformLayer virtual so that subclasses which don't have PlatformLayers can override.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: Crash in XMLDocumentParser::startElementNs
        https://bugs.webkit.org/show_bug.cgi?id=122817

        Reviewed by Darin Adler.

        Exit early in startElementNs when listeners and handlers of synchronous events such as load event
        removes the inserted node inside parserAppendChild.

        Test: fast/parser/xhtml-synchronous-detach-crash.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old frontend localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=122846

        Reviewed by Timothy Hatcher.

        * Configurations/WebCore.xcconfig:
        * English.lproj/localizedStrings.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        Remove the file and references to it. We no longer need to exclude
        localizedString.js from some builds.

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Windows old front-end related code
        https://bugs.webkit.org/show_bug.cgi?id=122845

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

2013-10-15  Morten Stenshorne  <mstensho@opera.com>

        Add support for the column-fill property
        https://bugs.webkit.org/show_bug.cgi?id=117693

        Reviewed by David Hyatt.

        This is only supported in the (new) region based multicol implementation.

        With column-fill support, a lot of multicol tests needed an update.
        The old implementation behaved as if column-fill were 'auto', but the
        initial value is 'balance', so now we need to be explicit about that.
        For auto-height tests it doesn't really matter - such multicols are always
        balanced anyway.

        Tests: fast/multicol/newmulticol/fixed-height-fill-auto.html
               fast/multicol/newmulticol/fixed-height-fill-balance.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnFill):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/RenderMultiColumnBlock.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/style/StyleMultiColData.h:

2013-10-15  Andreas Kling  <akling@apple.com>

        Skip unnecessary null check in RenderText::textLength().
        <https://webkit.org/b/122841>

        Reviewed by Antti Koivisto.

        RenderText will never have a null String in m_text, so textLength()
        can grab at the StringImpl directly, avoiding a null check.

2013-10-15  Andreas Kling  <akling@apple.com>

        FontGenericFamilies should not be ref-counted.
        <https://webkit.org/b/122835>

        Reviewed by Anders Carlsson.

        FontGenericFamilies is singly-owned by Settings.

2013-10-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Move RenderBlock::layoutShapeInsideInfo into RenderBlock.cpp
        http://bugs.webkit.org/show_bug.cgi?id=122843

        Reviewed by Oliver Hunt.

        Historically, layoutShapeInsideInfo was a static function in RenderBlockLineLayout, then it has changed to be a member of RenderBlock,
        but at that time it hasn't been moved to RenderBlock.cpp. This patch moves it into RenderBlock.cpp next to the Shapes functions. I removed
        an unnecessary CSS_SHAPES #ifdef as well from RenderBlock.cpp.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:

2013-10-15  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Build fails.
        https://bugs.webkit.org/show_bug.cgi?id=122830

        Reviewed by Brent Fulgham.

        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Update to new return type.

2013-10-15  Andreas Kling  <akling@apple.com>

        FileIconLoader should not be ref-counted.
        <https://webkit.org/b/122827>

        FileIconLoader is singly-owned by FileInputType.

        Reviewed by Antti Koivisto.

2013-10-15  Andreas Kling  <akling@apple.com>

        RenderText should cache RenderStyle in locals more.
        <https://webkit.org/b/122823>

        Reviewed by Antti Koivisto.

        Now that fetching the RenderStyle has to go through the parent,
        we should avoid unnecessary loads by caching style() in a local.

2013-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Remove redundant Document::getElementById
        https://bugs.webkit.org/show_bug.cgi?id=122813

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4e8f1c5316415614b84370c602beae4a1008299f

        This function simply calls virtual TreeScope::getElementById and Document inherits from TreeScope.

        * WebCore.exp.in:
        * dom/Document.cpp:
        * dom/Document.h:

2013-10-14  Santosh Mahto  <santosh.ma@samsung.com>

        in safari,the background-color of input[type="search"] can't work
        https://bugs.webkit.org/show_bug.cgi?id=119967

        Reviewed by Ryosuke Niwa.

        When input type=search is styled with css background property then
        it does not change the background-color of field. Its happening becasue
        search field is not counted as styled control. Thus theme ignores the 
        css background property. With this patch search field is also counted as 
        styled control so background property reflects on search field.

        Test: fast/forms/search/search-field-background-color.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):Now search field is also
        a styled control.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        EventPath::updateTouchLists traverses through EventPath thrice
        https://bugs.webkit.org/show_bug.cgi?id=122804

        Reviewed by Benjamin Poulain.

        Instead of traversing through EventPath for each TouchList, traverse through TouchList for every EventContext.
        This paves our way to have one-pass traversal over EventPath, and evetually to remove EventContext altogether.

        This change should also improve the cache hit rate since all Touch objects tend to be allocated at the same time
        but this performance improvement is probably not observable.

        * dom/EventContext.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Added a new constructor that takes Touch and
        and TouchListType. We need to store these two values in order to update EventContext later.
        (WebCore::EventRelatedNodeResolver::touch): Added,
        (WebCore::EventRelatedNodeResolver::touchListType): Added.
        (WebCore::addRelatedNodeResolversForTouchList): Extracted from updateTouchListsInEventPath.
        (WebCore::EventPath::updateTouchLists): Moved the loop over m_path here. Notice that the outer loop iterates
        over m_path instead of touchList as done in updateTouchListsInEventPath. The inner loop goes through resolvers
        and adds Touch objects each EventContext as needed.

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Don't generate a wasteful isObservable check in isReachableFromOpaqueRoots
        https://bugs.webkit.org/show_bug.cgi?id=122802

        Reviewed by Mark Hahnenberg.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        Updated results.

2013-10-14  Samuel White  <samuel_white@apple.com>

        AX: fieldset should have GroupRole and legend should be description.
        https://bugs.webkit.org/show_bug.cgi?id=122534

        Reviewed by Chris Fleizach.

        Changes fieldset to derive AXDescription from legend if one is available. Added
        convenience method to AccessibilityObject to fetch element if available.

        Test: accessibility/fieldset-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::isARIAHidden):
        (WebCore::AccessibilityObject::isDOMHidden):
        (WebCore::AccessibilityObject::defaultObjectInclusion):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isHidden):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::getAttribute):
        (WebCore::AccessibilitySlider::valueForRange):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        (WebCore::AccessibilitySlider::setValue):
        (WebCore::AccessibilitySlider::inputElement):
        * accessibility/AccessibilitySlider.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::legend):
        * html/HTMLFieldSetElement.h:

2013-10-14  Roger Fong  <roger_fong@apple.com>

        Windows select element doesn't draw RTL properly.
        https://bugs.webkit.org/show_bug.cgi?id=122785.

        Reviewed by Brent Fulgham.

        Covered by fast/text/international/pop-up-button-text-alignment-and-direction.html.

        Problems include the popup items not drawing on the right hand side and 
        not respecting the direction or the directional override styling of the option.
        The selected element (drawn in the actual select element) also doesn't respect 
        the style settings of the selected menu option.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):

2013-10-14  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix.

        * WebCore.vcxproj/WebCoreCommon.props:

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>::createBidiRunsForLine
        https://bugs.webkit.org/show_bug.cgi?id=122776

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/aca89bc4d984705a1f94b623dae0ab03e239a248

        Fix modification of whitespace endpoints to not assume it's operating on RenderTexts

        During line layout, we use midpoints to identify RenderObjects, or parts of
        RenderObjects, that don't need InlineBoxes, usually because of collapsed whitespace.

        Prior to actually creating BidiRuns (the precursor to InlineBoxes), we use
        checkMidpoints to fix up our lineMidpointState to handle the case where we start
        ignoring spaces in our line, but don't stop until somewhere on the following line.
        Previously, this function assumed that the final midpoint (called an endpoint)
        was a RenderText, but this assumption is wrong if we have a beginning midpoint
        created by shouldSkipWhitespaceAfterStartObject (which handles inlines and list
        markers) and no endpoint on that line. In that case, we'd instead adjust the
        position backwards on the beginning midpoint, which would cause us to fail to
        create an InlineBox for the inline or list marker. In the new test added, this
        would actually trigger a crash due to an assumption when visually re-ordering
        BidiRuns that a non-empty line would actually contain at least one such run.

        Test: fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure in Range::processContentsBetweenOffsets
        https://bugs.webkit.org/show_bug.cgi?id=122777

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/c15de182774c7859c20d97126eb844ae97b792a4

        This patch changes ASSERT statements for checking |endOffset| inbound in Range::processContentsBetweenOffsets()
        to limit |endOffset|. This is necessary when DOMNodeRemovedFromDocument event handler splits text nodes,
        Range::insertNode() on text node, in the range calling Range::deleteContents().

        Test: fast/dom/Range/range-delete-contents-mutation-event-crash.html

        * dom/Range.cpp:
        (WebCore::Range::processContentsBetweenOffsets):

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Add an empty window.crypto.webkitSubtle
        https://bugs.webkit.org/show_bug.cgi?id=122778

        Reviewed by Mark Hahnenberg.

        Tests: security/crypto-subtle-gc-2.html
               security/crypto-subtle-gc-3.html
               security/crypto-subtle-gc.html

        * DerivedSources.make: Process SubtleCrypto.idl.

        * crypto: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

        * bindings/js/JSSubtleCryptoCustom.cpp: Added. Empty for now, but we'll certainly
        need custom bindings code here.

        * crypto/SubtleCrypto.cpp: Added.
        (WebCore::SubtleCrypto::SubtleCrypto):
        (WebCore::SubtleCrypto::document):
        * crypto/SubtleCrypto.h: Added.        
        * crypto/SubtleCrypto.idl: Added.
        * page/Crypto.cpp:
        (WebCore::Crypto::subtle):
        * page/Crypto.h:
        * page/Crypto.idl:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove GestureEvent leftovers from WebCore
        <https://webkit.org/b/122780>

        Reviewed by Anders Carlsson.

        - Removed some remaining references to PlatformGestureEvent, supposed to
          be removed by r157316
        - TOUCH_ADJUSTMENT should be reworked after GestureEvent feature
          removal

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/EventHandler.h:
        * platform/PlatformEvent.h:
        * platform/ScrollAnimatorNone.cpp:
        * platform/ScrollableArea.h:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Build fix after r157366
        http://bugs.webkit.org/show_bug.cgi?id=122783

        When TOUCH_AJUSTMENT is enabled build fails due to some
        refactors in TextRender functions.

        Reviewed by Anders Carlsson.

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::appendContextSubtargetsForNode):

2013-10-14  Alexandru Chiculita  <achicu@adobe.com>

        The content of the DOM panel for iframes is not updated until the "onload" event
        https://bugs.webkit.org/show_bug.cgi?id=122653

        Reviewed by Darin Adler.

        Test: http/tests/inspector-protocol/loading-iframe-document-node.html

        Renamed InspectorDOMAgent::loadEventFired to InspectorDOMAgent::didCommitLoad and moved the call site
        from InspectorInstrumentation::loadEventFiredImpl to InspectorInstrumentation::didCommitLoadImpl.
        This is to make sure that it will invalidate the content of the iframe as soon as the frame navigates
        to a different page. This way the new node can be retrieved as soon as the page has some content, and
        not just when the page is fully loaded.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCommitLoad): Renamed from loadEventFired, as it is now called from
        didCommitLoadImpl instead.
        (WebCore::InspectorDOMAgent::frameDocumentUpdated): Updated comment to point to the new function name.
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::loadEventFiredImpl): Removed call do InspectorDOMAgent.loadEventFired.
        (WebCore::InspectorInstrumentation::didCommitLoadImpl): Added call to InspectorDOMAgent.didCommitLoad.

2013-10-14  Roger Fong  <roger_fong@apple.com>

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

        Reviewed by Brent Fulgham.

        Add a field to keep track of hovered over index.
        Use index to determine whether or not to use the existing selected index on the mouse down event.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:

2013-10-14  Tim Horton  <timothy_horton@apple.com>

        Virtualize PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=122672

        Reviewed by Anders Carlsson.

        No new tests, just a refactoring.

        * WebCore.exp.in:
        setGeometryFlipped is on PlatformCALayerMac now.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Add PlatformCALayer.cpp, PlatformCALayerWin.h, and let VS do its
        thing with some other files.

        * WebCore.xcodeproj/project.pbxproj:
        Add PlatformCALayer.cpp and PlatformCALayerMac.h.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::platformLayer):
        Make a PlatformCALayerWin explicitly.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        Added. Decide whether to make a PlatformCALayer{Mac, Win} based on the platform.
        Later, we will decide between other subclasses based on other things.

        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        Do the same thing for filtersCanBeComposited.

        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::setContentsToCanvas):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Use createPlatformCALayer instead of PlatformCALayer::create.

        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        For now, use the PlatformCALayerMac version of filtersCanBeComposited,
        since this code is heavily tied to having CALayers in the Web process.

        * platform/graphics/ca/GraphicsLayerCA.h:
        Include PlatformCALayer.h here so we can get the LayerType enum.
        (NOTE-to-be-removed: if there's a better way to do this, I'm open to
        suggestions; I couldn't puzzle out nested 'enum class' stuff).

        Add the createPlatformCALayers.

        * platform/graphics/ca/PlatformCAAnimation.h:
        Friend the subclasses too.

        * platform/graphics/ca/PlatformCALayer.cpp: Added.
        (WebCore::PlatformCALayer::~PlatformCALayer):
        Pull the shared part of the PlatformCALayer destructor out.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        (WebCore::PlatformCALayer::setOwner):
        (WebCore::PlatformCALayer::PlatformCALayer):
        Virtualize all the things. Move platform specific members to their new subclasses.

        * platform/graphics/ca/mac/PlatformCALayerMac.h: Added.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        Move the PLATFORM(MAC) implementations from PlatformCALayer to PlatformCALayerMac.

        (PlatformCALayer::platformCALayer):
        The platformCALayer lookup function is static on PlatformCALayer, so it can't
        be moved to the subclasses. It might be a good idea in the future to move towards
        a platform-independent mechanism for looking up PlatformCALayers from PlatformLayers,
        and to avoid needing to do this as often as we do now.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        Move the PLATFORM(WIN) implementations from PlatformCALayer to PlatformCALayerWin.

        (PlatformCALayerWin::create):
        (PlatformCALayer::platformCALayer):

        * platform/graphics/ca/win/PlatformCALayerWin.h: Added.

        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        Include PlatformCALayerWin.h and explicitly make PlatformCALayerWins here.

2013-10-14  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [cmake] MediaControlsApple is used only by Efl port and is on CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=122772

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Removed MediaControlsApple.cpp
        * PlatformEfl.cmake: Added MediaControlsApple.cpp

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        window.crypto doesn't preserve custom properties
        https://bugs.webkit.org/show_bug.cgi?id=122770

        Reviewed by Mark Hahnenberg.

        Test: security/crypto-gc.html

        Generate isReachableFromOpaqueRoots that makes Crypto live as long as the document
        lives (because that's when it's observable through window object).

        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        (WebCore::Crypto::~Crypto):
        (WebCore::Crypto::document):
        * page/Crypto.h:
        (WebCore::Crypto::create):
        Made Crypto a ContextDestructionObserver, so that it can report its document to bindings.
        Removed ScriptWrappable, because it seems to have served no purpose in this class.

        * page/Crypto.idl: Added GenerateIsReachable. Removed ImplementationLacksVTable,
        because the class now has a vtable, and can be checked for bindings integrity.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::crypto): Pass a document when creating
        crypto.

2013-10-14  Andreas Kling  <akling@apple.com>

        CTTE: NamedNodeMap always has a corresponding Element.
        <https://webkit.org/b/122769>

        Reviewed by Anders Carlsson.

        Made NamedNodeMap::m_element a reference and remove an assertion
        that it's never null.

2013-10-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r157408): Crashes in RenderFullScreen::wrapRenderer().

        Unreviewed crash fix for these two tests:

        - fullscreen/full-screen-restrictions.html
        - fullscreen/empty-anonymous-block-continuation-crash.html

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::wrapRenderer):

            Get the RenderArena from Document like we did before this patch.

2013-10-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside shapes should update the layout after the image has been loaded
        https://bugs.webkit.org/show_bug.cgi?id=122340

        Reviewed by Simon Fraser.

        Ensure that the an image-valued shape-outside layout is updated after the image has
        been loaded.

        Test: http/tests/css/css-image-valued-shape.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged): Added code for the shape-outside case.
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange): Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement): Ditto.
        (WebCore::RenderElement::setStyle): Ditto.

2013-10-14  Andreas Kling  <akling@apple.com>

        Remove some silly null checks in Element/NamedNodeMap.
        <https://webkit.org/b/122767>

        Reviewed by Darin Adler.

        Make shouldIgnoreAttributeCase() take a const Element&, exposing
        some unnecessary null checks.

2013-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r122737.

        * dom/Node.h: Add explicit WebCore namespace to macro definition to work around
        Visual Studio bug.

2013-10-14  Andreas Kling  <akling@apple.com>

        Pass Document directly to anonymous renderer constructors.
        <https://webkit.org/b/122752>

        Reviewed by Antti Koivisto.

        Added separate constructors for creating anonymous renderers that
        take a Document& instead of a null Element*/Text*.

        Removed setDocumentForAnonymous() and all createAnonymous() helpers.
        ...and RenderObject::m_node is now a Node&, wohoo!

2013-10-13  Sam Weinig  <sam@webkit.org>

        CTTE: Add more node conversion helpers
        https://bugs.webkit.org/show_bug.cgi?id=122737

        Reviewed by Darin Adler.

        - Factor NODE_TYPE_CASTS into TYPE_CASTS_BASE(ToClassName, FromClassName)
          to allow for DOCUMENT_TYPE_CASTS.
        - Replace more static_casts<>.

2013-10-14  Zan Dobersek  <zdobersek@igalia.com>

        Reintroduce PassRefPtr<Event> copy in ScopedEventQueue::dispatchEvent
        https://bugs.webkit.org/show_bug.cgi?id=122742

        Reviewed by Alexey Proskuryakov.

        This is a follow-up to r157219 which introduced a workaround for the GCC's quirky behavior that
        was resulting in crashes due to the PassRefPtr<Event> object passed to EventDispatcher::dispatchEvent
        being copied and nullified first before retrieving the EventTarget of the Event object wrapped in that
        PassRefPtr.

        The implementation is now adjusted to first retrieve the pointer to the Event's EventTarget and store
        it in a local variable. That variable is then passed as the first parameter to EventDispatcher::dispatchEvent,
        and the PassRefPtr<Event> passed directly as the second parameter. Previously the pointer of that PassRefPtr
        object was passed in, with a new PassRefPtr being created which would increase the reference count of the
        ref-counted object. Passing in the original PassRefPtr avoids the unnecessary reference count increase by creating
        a copy. That still nullifies the original PassRefPtr, but that's not a problem anymore.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Margin should be animatable
        https://bugs.webkit.org/show_bug.cgi?id=122524

        Reviewed by Darin Adler.

        Mark content for relayout after shape-margin changes, and add shape-margin
        to the list of animatable properties.

        Tests: fast/shapes/shape-outside-floats/shape-outside-dynamic-shape-margin.html
               fast/shapes/shape-outside-floats/shape-outside-shape-margin-animation.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Add
        shape-margin to the map of animatable CSS properties.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange): Compare shape-margins,
        and mark dependent content for relayout if they have changed.

2013-10-14  Arvid Nilsson  <anilsson@blackberry.com>

        Don't crash after OpenGL robustness reset
        https://bugs.webkit.org/show_bug.cgi?id=122750

        Reviewed by George Staikos.

        JIRA 517132.
        Just log the incident and pretend like nothing happened.

        No new tests, we don't have repeatable steps to reproduce a robustness
        reset.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::makeContextCurrent):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Buildfix after r157393
        https://bugs.webkit.org/show_bug.cgi?id=122749

        Reviewed by Andreas Kling.

        Buildfix with error enumeration value 'CSS_FR' not handled in switch.

        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Present replaced objects with 0xFFFC character
        https://bugs.webkit.org/show_bug.cgi?id=122744

        Reviewed by Mario Sanchez Prada.

        Replaced elements should be emitted in GTK/EFL and
        marked their presence with the replacement character.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange):

2013-09-16  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Implement support for <flex>
        https://bugs.webkit.org/show_bug.cgi?id=115362

        Reviewed by Andreas Kling.

        From Blink r149134, r149480, r149532, r150287 and r156127 by <jchaffraix@chromium.org>
        From Blink r157820 by <svillar@igalia.com>

        Added support for flexible lengths ('fr' unit) in CSS Grid Layout
        code. This requires the addition of GridLength class to
        encapsulate the knowledge of <flex> to the grid layout code.

        Also updated the algorithm that computes the layout. It increases
        the value of 1fr based on the grid tracks' usedBreath to fraction
        ratio (called normalizedFractionValue). This enables increasing
        the fraction value while updating the available space to account
        for processed grid tracks. The algorithm stops when we run out of
        grid tracks or available space (one grid item has an intrinsic
        size too big). This matches the specs to the letter for the known
        available space case (both the unknown case and the interaction
        with 'span' are left out of this patch).

        Tests: fast/css-grid-layout/flex-and-minmax-content-resolution-columns.html
               fast/css-grid-layout/flex-and-minmax-content-resolution-rows.html
               fast/css-grid-layout/flex-content-resolution-columns.html
               fast/css-grid-layout/flex-content-resolution-rows.html

        * GNUmakefile.list.am: Added GridLength.h to the build system.
        * Target.pri: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth): Replace Length by GridLength.
        * css/CSSGrammar.y.in: Added FR support.
        * css/CSSParser.cpp: Ditto.
        (WebCore::CSSParser::parseGridBreadth):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSParserValues.cpp: Added FR support.
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::operator[]):
        (WebCore::CSSParserString::equalIgnoringCase):
        * css/CSSPrimitiveValue.cpp: Added FR support.
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h: Added a couple of missing const.
        (WebCore::CSSPrimitiveValue::isFlex):
        * css/StyleResolver.cpp: Added FR support.
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackSize):
        * rendering/RenderGrid.cpp:
        (WebCore::GridTrackForNormalization::GridTrackForNormalization):
        New helper struct to ease the computation of track breadths with
        flexible lengths.
        (WebCore::GridTrackForNormalization::operator=):
        (WebCore::RenderGrid::computePreferredTrackWidth): Replaced Length by GridLength.
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Grow grid lines
        having a fraction as the MaxTrackSizingFunction.
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength): Replaced Length by GridLength.
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength): Ditto.
        (WebCore::sortByGridNormalizedFlexValue):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth): Increase
        the fraction value while updating the available space to account
        for processed grid tracks.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::distributeSpaceToTracks): Never shrink track sizes.
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h: Added.
        (WebCore::GridLength::GridLength):
        (WebCore::GridLength::isLength):
        (WebCore::GridLength::isFlex):
        (WebCore::GridLength::length):
        (WebCore::GridLength::flex):
        (WebCore::GridLength::setFlex):
        (WebCore::GridLength::operator==):
        * rendering/style/GridTrackSize.h: Replaced Length by GridLength.
        (WebCore::GridTrackSize::length):
        (WebCore::GridTrackSize::setLength):
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        (WebCore::GridTrackSize::setMinMax):
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth):

2013-10-14  peavo@outlook.com  <peavo@outlook.com>

        Broken text rendering when input field has selection.
        https://bugs.webkit.org/show_bug.cgi?id=122716

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-rendering-with-input-selection.html.
               fast/text/text-rendering-with-input-selection-expected.html.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Check that text has selection.

2013-10-14  Zalan Bujtas  <zalan@apple.com>

        Unexpected word wrapping for wrapped content then raw content.
        https://bugs.webkit.org/show_bug.cgi?id=121130

        Reviewed by Antti Koivisto.

        When deciding whether a line is considered empty, we need to check if the current
        object is fully responsible for the currently uncommitted width. It helps differentiating
        <span></span><span>abcd</span> from <span>a</span><span>bcd</span>, where in the first
        case when we hit the second <span> the line is still considered empty, as opposed to the
        second example.

        Test: fast/css/unexpected-word-wrapping-with-non-empty-spans.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-14  Andreas Kling  <akling@apple.com>

        Be more efficient about passing RenderStyle to attachRenderTree().
        <https://webkit.org/b/122743>

        Reviewed by Antti Koivisto.

        Have attachRenderTree() and createRendererTreeIfNeeded() pass the
        RenderStyle in a PassRefPtr to avoid churning the ref count.

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] 2 span positions are not resolved correctly
        https://bugs.webkit.org/show_bug.cgi?id=119717

        Reviewed by Andreas Kling.

        From Blink r155397 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-bad-resolution-double-span.html

        Two opposite 'span' or 'auto' positions should be resolved using
        the auto placement algorithm. We were only checking for the 'auto'
        case. This also covers the case of other positions that, according
        to the spec, should be treated as 'auto'.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):

2013-10-13  Andreas Kling  <akling@apple.com>

        Use RenderElement instead of RenderObject in more places.
        <https://webkit.org/b/122734>

        Reviewed by Antti Koivisto.

        Convert some sites to use RenderElement (or type inference) instead
        of RenderObject for less branchy code.

2013-10-13  Darin Adler  <darin@apple.com>

        Deprecate or remove deleteAllValues functions; there are only a few call sites left
        https://bugs.webkit.org/show_bug.cgi?id=122738

        Reviewed by Anders Carlsson.

        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::deleteAllCookiesAndDomains):
        * platform/network/blackberry/rss/RSSParserBase.cpp:
        (WebCore::RSSFeed::clear):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::~WCDataObject):
        Renamed deleteAllValues to deprecatedDeleteAllValues.

2013-10-13  Sam Weinig  <sam@webkit.org>

        Merge NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=122735

        Reviewed by Antti Koivisto.

        NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS are identical. Let them become one
        with one another.

2013-10-13  Andreas Kling  <akling@apple.com>

        Uncrashify Document::head() too. (Why am I even awake?)

2013-10-13  Andreas Kling  <akling@apple.com>

        REGRESSION(r157381): Make Document::body() crash less when there is no documentElement.

        Unreviewed.

2013-10-13  Darin Adler  <darin@apple.com>

        Rewrite Document::body and Document::head in modern style, way clearer and shorter
        https://bugs.webkit.org/show_bug.cgi?id=122717

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::body): Use iterator to make this way easier to read.
        (WebCore::Document::head): Ditto.

        * html/HTMLTagNames.in: Added generateTypeHelpers for body and head.

== Rolled over to ChangeLog-2013-10-13 ==
